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
它可以正常工作。
是否与斜杠有关?
答案 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>