我的.htaccess中有这个:
RewriteEngine On
RewriteBase /
RewriteRule ^url/(.*)$ url.php?url=$1 [L]
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
为什么http://mydomain.ext/url/http://www.google.com/
与第一条规则不匹配,而第二条规则
编辑:当我注释掉最后一行时它似乎有效,但当然我不能这样做。发生了什么事?
Edit2:如果我将其更改为此功能:
RewriteEngine On
RewriteBase /
RewriteRule ^url/(.*)$ url.php?url=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
有人可以解释为什么以前的版本没有按预期工作吗?
答案 0 :(得分:1)
请求可能会被重写两次:/url/http://…
→/url.php
→/index.php
。从第二个规则中排除该路径,它应该工作:
RewriteCond $1 !=url.php
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
答案 1 :(得分:0)
可能是因为“行开始”:“^”匹配以“url /”开头的URL。
例如,尝试“^.*url/(.*)$
”。