开发者

RewriteRule not matching?

I have this in my .htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^url/(.*)$ url.php?url=$1 [L]
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

Why does http://mydomain.ext/url/http://www.google.com/ not match the first rule, but the second???

Edit: it seems to work when I comment out the last line, but of course i cannot do that. What's going on?

Edit2: If i change it to this it works:

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]

Can anyone explain why the previous version didn't work as expected?


The request is probably getting rewritten twice: /url/http://…/url.php/index.php. Exclude that path from the second rule and it should work:

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


Probably because the "start of line anchor": "^" that matches URLs starting with "url/".

Try a "^.*url/(.*)$", for example.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜