开发者

RewriteRule not matching?

开发者 https://www.devze.com 2023-01-27 20:19 出处:网络
I have this in my .htaccess: RewriteEngine On RewriteBase / RewriteRule ^url/(.*)$ url.php?url=$1 [L] RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

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

精彩评论

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