2010-11-30 71 views
2

我有这个在我的.htaccess:RewriteRule不匹配?

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] 

任何人都可以解释为什么预期之前的版本没有工作?

回答

1

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

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

谢谢,正如我在编辑中提到的那样添加`RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d`在最后一行似乎具有相同的效果之前,但您的解决方案更短。 – Alfonso 2010-11-30 14:05:54

0

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

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

+0

请求URL是否以`url /`开头?例如`http://foo.bar/url/http:// www.google.com /` – Alfonso 2010-11-30 13:52:47