1

単純な mod_rewrite ルールだと思っていたものがあります。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^store/([a-z0-9_\-]+)/?([a-z0-9_\-]+)?(.*)?$ store/$2?store_name=$1$3 [L]

ただし、次のような URL にアクセスすると、次のようになります。

http://www.mydomain.com/store/e95_airport/

次のようになります。

http://www.mydomain.com/store/e95_airport/////////////////////

URL が読み込まれることを期待しています。

index.php?store_name=e95_airport

次のような URL を呼び出すと、正常に動作します。

store/e95_airport/some-page-other-than-index.php

.htaccess ファイルの他の場所で競合が発生した場合に備えて、他のすべての mod_rewrite ルールを無効にしました。私の書き換えルールの何が問題なのかを診断できる人はいますか? どんな助けでも大歓迎です!

4

2 に答える 2

3

問題は、サイトを本質的に同じアドレスにリダイレクトしているため、サイト自体がループに陥っていることです。

さて、書き換えで変更していますが、書き換え先の URL はまだ式と一致しています。

mod_rewrite が機能する方法は、URL を書き換えると、新しい URL で自分自身を効果的に再クエリすることです。そのため、新しい URL が引き続き式と一致する場合、ループに陥ります。

なぜ21スラッシュで止まるのですか?これは、Apache がループ状態にあることを検出し、自身を 20 回再クエリすると停止するためです。

于 2012-06-01T21:44:55.873 に答える
0

@Spudleyが言ったように、あなたはループに陥っています。

あなたの書き換えルールを見て、あなたが望む結果を見ると、書き換えルールも間違っていると言えます。次のようになります。

RewriteRule ^store/([a-z0-9_\-]+)/?([a-z0-9_\-]+)?(.*)?$ index.php?store_name=$1 [L]
于 2012-06-01T21:49:03.893 に答える