0

私のhttpd.conf ファイルにはすでに多くの mod_rewrite ルールが機能しています。つい最近、Google がクエリ文字列を含む、書き換えられていない URL の 1 つをインデックスに登録していたことに気付きました。

http://example.com/?state=arizona

mod_rewrite を使用して、次の URL への 301 リダイレクトを行いたいと考えています。

http://example.com/arizona

問題は、私の書き換えルールの後半で、クエリ変数を WordPress に渡すために 2 番目の URL が書き換えられていることです。最終的に次のように書き換えられます。

http://example.com/index.php?state=arizona

これは適切な機能です。これまでに試したことはすべて、まったく機能しないか、無限の書き換えループに陥りました。これは私が今持っているもので、ループに陥っています:

RewriteCond %{QUERY_STRING} state=arizona [NC]
RewriteRule .*   http://example.com/arizona [R=301,L]
#older rewrite rule that passes query string based on URL:
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L]

これにより、無限の書き換えループが発生し、次の URL に移動します。 http://example.com/arizona?state=arizona

次に、これを試しました:

RewriteRule .*   http://example.com/arizona? [R=301,L]

URL 内のクエリ文字列を削除しましたが、それでもループが発生します。

4

2 に答える 2

1

わかりました、2番目の RewriteCond を追加すると、最終的に修正されました-正しく書き換えられ、ループはなくなりました:

# redirect dynamic URL: ?state=arizona
RewriteCond %{QUERY_STRING} state=arizona [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule .*   http://domain.com/arizona? [R=301,L]
# older rewrite rule that passes query string based on URL:
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L]

そして、アリゾナだけでなく、どの州の値でも機能させるコードを次に示します。

RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} ^state=([A-Za-z-]+)$ [NC]
RewriteRule .*   http://domain.com/%1? [R=301,L]
于 2012-12-13T22:31:24.000 に答える
0

RewriteCond %{REQUEST_URI} ^/\?state=arizona$ [NC]

する必要があります

RewriteCond %{QUERY_STRING} state=arizona [NC]

request_uriは?で終了します トークン。

于 2012-12-12T13:31:00.517 に答える