RewriteRule不匹配?

时间:2010-11-30 13:44:57

标签: apache .htaccess mod-rewrite

我的.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]

有人可以解释为什么以前的版本没有按预期工作吗?

2 个答案:

答案 0 :(得分:1)

请求可能会被重写两次:/url/http://…/url.php/index.php。从第二个规则中排除该路径,它应该工作:

RewriteCond $1 !=url.php
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

答案 1 :(得分:0)

可能是因为“行开始”:“^”匹配以“url /”开头的URL。

例如,尝试“^.*url/(.*)$”。