0

現在、自分のWebサイトの/sub/フォルダーにある.htaccessファイルで2つの書き換えルールを使用しようとしています。1つは、URLの最後にあるindex.php、index.htmlなどを削除するためのリダイレクトです(例:/sub/index.php-> / sub /:)。

RewriteCond %{REQUEST_URI} ^(.*)/index\.[^\.]+$
RewriteRule index.* %1/ [r=301,L]

もう1つは、phpのURLを書き直して、クエリ文字列を取得することです。例:/ sub / tests-testing-> /sub/index.php?field=testing-testing:

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

これらはそれ自体で問題なく動作するように見えますが、私はそれらを一緒に動作させる方法を理解できません。

最初のルールは「index(...)」と一致しているため、2番目のルールでどのように問題が発生するかがわかります。そのため、これらのさまざまなバリエーションを試しましたが、エンドレスリダイレクトループまたはリダイレクトバックのいずれかが発生し続けます。ウェブサイトのルートに。

4

1 に答える 1

0

を削除するときは、URI ではなく、実際のリクエストと照合する必要がありindex.phpます。2 つのルールが連携しない理由は、mod_rewrite が URI の変更が止まるまですべてのルールをループし続けるためです。2 番目のルールは URI をindex.phpに書き換え、最初のルールはそれに一致してそれを削除し、次に 2 番目のルールはそれを書き換えます。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.(php|html?)
RewriteRule ^ /%1 [R=301,L]

次に、2 番目のルールをそのままにしておくことができるはずです。

于 2012-09-18T22:28:17.313 に答える