我正在尝试使用此
将每个请求发送到www.example.com/user/
到www.example.com/user.php?id=0
RewriteRule ^user/$ user.php?id=0
基本上,如果有人在没有用户ID的情况下访问www.example.com/user/
,则该网站将默认为id = 0
。
然而,当我输入www.example.com/user/
时,Apache似乎只是提供了user.php文件,完全忽略了RewriteRule。对于为什么会发生这种情况的任何想法?
谢谢。
我应该提一下,只有当我使用URL 中的相同的单词作为php文件的名称时才会发生这种情况。例如,如果我使用
RewriteRule ^yes/$ user.php?id=0
转到www.example.com/yes/
会很好地应用RewriteRule。
所以似乎Apache查找具有该名称的文件并忽略RewriteRule。
不,添加[L]标志没有帮助。
这是我的.htaccess:
RewriteEngine On
RewriteRule ^user/$ user.php?id=0
RewriteRule ^user/([0-9]+)$ user.php?id=$1
答案 0 :(得分:6)
试试这个:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user/$ user.php?id=0 [L,NC,QSA]
RewriteRule ^user/([0-9]+)/?$ user.php?id=$1 [L,NC,QSA]
[L]标志使mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。
来自:http://httpd.apache.org/docs/current/rewrite/flags.html#flag_l
答案 1 :(得分:0)
我认为您的重写规则顺序错误,并且您没有使用[L]
标志告诉apache在规则匹配时不再运行任何规则。您也可以使用+
运算符代替*
来匹配第二条规则中至少一个数字:
RewriteRule ^user/$ user.php?id=0 [L]
RewriteRule ^user/([0-9]+)$ user.php?id=$1 [L]