次のようなクエリ文字列パラメーターを持つURLがあるとします。
/index.php?book=DesignPatterns&page=139
/index.php?book=Refactoring&page=285
mod_rewrite を使用して、これらをこのようなSES URLにリダイレクトするにはどうすればよいですか?
/DesignPatterns/139
/Refactoring/285
RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+)
RewriteRule ^index.php /%1/%2? [L,R=301]
RewriteRule はパス(疑問符まで)のみを調べるため、 RewriteCond を使用してクエリ文字列の値を取得します。
RewriteCond
からの一致は、%1
、%2
などではなく、$1
、$2
などにキャプチャされることに注意してください。
RewriteRule
の最後にある?
にも注意してください。これは、元のクエリ文字列を新しいURLに追加しないようにmod_rewriteに指示するため、/DesignPatterns/151
の代わりに/DesignPatterns/151?book=DesignPatterns&page=151
が使用されます。
[L,R=301]
フラグは次の2つのことを行います。
L
は、他の方法では一致する可能性のある他のルールが処理されないことを保証します(つまり、これが処理される「最後の」ルールであることを保証します)。R=301
を指定すると、サーバーはリダイレクト応答を返します。書き換えるのではなく、新しいURLで再試行するようにクライアントに指示します。 =301
は 永続的なリダイレクト にするため、特に、検索エンジンはインデックス内の古いURLを新しいURLに置き換えることを認識します。