.htaccess RewriteRule目录

时间:2011-12-26 13:30:41

标签: .htaccess mod-rewrite

RewriteRule ^(.*)/?$ ./view.php?id=$1

如果说id =“abc123”,我可以完全正常访问www.site.com/abc123

但我希望能够使用www.site.com/view/abc123

进行访问

所以我试过了:

RewriteRule ^view/(.*)/?$ ./view.php?id=$1

但无济于事。当我尝试访问www.site.com/view/abc123时,似乎它甚至没有获取$_GET请求来获取ID。 怎么了?

我的整个.htaccess:

RewriteEngine On
RewriteBase /~user/sitetest/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^view/(.+?)/?$ view.php?id=$1

编辑:

使用上面的.htaccess,当我访问时: http://localhost/~user/sitetest/view/abc123

它不会从view.php加载$ _GET []。我甚至尝试回显$ _GET [],但它显示为空白。

如果我将其修改为RewriteRule ^(.+?)/?$ view.php?id=$1 并且访问http://localhost/~user/sitetest/abc123它可以正常工作。

如果我将其修改为RewriteRule ^view-(.+?)/?$ view.php?id=$1 并且访问http://localhost/~user/sitetest/view-abc123它可以正常工作。

是否与斜杠有关?

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

# this next line is really important
RewriteBase /

RewriteRule ^view/(.+?)/?$ view.php?id=$1

使用RewriteBase,您具体告诉服务器在服务器的根目录中使用view.php。如果未指定RewriteBase,则服务器将在请求的目录中使用view.php(是/ view /)。

希望这会有所帮助:)

答案 1 :(得分:0)

我认为你在正则表达式的开头缺少/

RewriteRule ^/view/(.*)$ /view.php?id=$1

答案 2 :(得分:0)

通过在RewriteRule中将RewriteBase设置为/并使用/ ~user / ...来修复它 (Tom Knapen的信条,因为代码示例而在这里发帖)。

所以,OP的.htaccess会变成:

<IfModule rewrite_module>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^view/(.+?)/?$ /~user/sitetest/view.php?id=$1
</IfModule>
<IfModule !rewrite_module>
    ErrorDocument 404 /home/user/public_html/sitetest/view.php
    #OR perhaps:
    #ErrorDocument 404 /home/user/httpdocs/sitetest/view.php
</IfModule>