2010-11-30 24 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/は、最初のルールが、2番目に一致しない???

編集:最後の行をコメントアウトすると機能するようですが、もちろんそれはできません。どうしたの?

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のリクエストがおそらく2回書き直されています。そのパスを2番目のルールから除外してください:

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

私の編集で 'RewriteCond%{REQUEST_FILENAME}を追加していただきありがとうございます!-f RewriteCond%{REQUEST_FILENAME}!-d'最後の行が同じ効果を持つように見える前に、あなたの解はより短くなります。 – Alfonso

+0

@Alfonso:あなたのソリューションは私のものよりも一般的で、他の既存のファイルやディレクトリも除外します。 – Gumbo

0

"start of line anchor":おそらく "url /"で始まるURLと一致する "^"です。

^.*url/(.*)$」などとお試しください。

+0

リクエストURLは 'url /'で始まっていませんか?例えば'http://foo.bar/url/http:// www.google.com /' – Alfonso

関連する問題