これについては頭を悩ませています。古い URL があります:
http://myserver/blog/archive?openview&type=Category&key=Demo
新しいURL
http://myserver/blog/categories/Demo
私はこれに対する書き換えルールを取得しようとしています。次のようになると思います:
^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]
しかし、それでは何も起こりません。URL とルールを試しました (? を / に置き換えます)。
http://myserver/blog/archive/openview&type=Category&key=Demo
^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]
そして、それは期待通りに動作します。古い URL で一致させるために ? をどのように処理するか、少し困惑しています。私が見つけたサンプルはすべて、逆のケースを説明しています。つまり、「きれいな」URL を醜い URL に送信します。私の場合、「醜い」URL は過去のユーザーがブックマークしたもので、新しいデータに適切にアクセスできるようにしたいのです。
答え1
少し考えてみる(そして読む)ドキュメント) 後で:
mod_rewriteのマッチはURLのロケーション部分のみを使用します。「?」はロケーションの終わりとパラメータ(別名QueryString)の始まりを示します。これに気づいてから、Googleから。
したがって、正しく変換するには、書き換え条件が必要です。
RewriteCond %{QUERY_STRING} ^openview&type=Category&key=(.*) [NC]
RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L]
魔法のように機能します