1

クエリ文字列を含むURLをクエリ文字列を含まないURLにリダイレクトしようとしていますが、クエリ文字列の値を使用したいと思います。

以下の例では、単一の状態を使用していますが、動的にする必要があります。つまり、クエリ文字列を含むすべてのURLを、クエリ文字列の値を含むクリーンなURLに解析します。

Example: http://www.mywebsite.com/?state=CA redirects to http://www.mywebsite.com/CA/

運が悪かったので、HTACCESSファイルに以下の情報を追加するのに疲れました。

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+)
RewriteRule ^ /%1/%2? [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\ )
RewriteRule ^ /%1? [L]

これらは機能しましたが、回避したいすべてのリダイレクトを入力する必要があります。

RewriteCond %{QUERY_STRING} state=FL
RewriteRule ^$ "http://www.mywebsite.com/fl/?" [R=301,L]
RewriteCond %{QUERY_STRING} state=RI
RewriteRule ^$ "http://www.mywebsite.com/ri/?" [R=301,L]

何か案は?ApacheでWordPressを使用しています。私はすべてが最新であると信じています。

4

1 に答える 1

0

元のルールが機能しない理由は、あなたの状態が次のように見えるためです。

state=FL

FLは正規表現と一致することはありません。これは、文字通りすべての小文字を意味し、FもLも小文字ではない[a-z]+ためです。[a-z]試す:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+) [NC]
RewriteRule ^ /%1/%2? [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\ ) [NC]
RewriteRule ^ /%1? [L,R=301]

したがって、[NC]条件のフラグにより​​、正規表現では大文字と小文字が区別されなくなります。

于 2012-10-27T21:26:01.547 に答える