- ベストアンサー
htaccessでのクエリ付URLのリダイレクト
- htaccessを使用してPerlスクリプトのURLを変換する方法について教えてください。
- mod_rewriteを使用して、URLの形式を変更したいのですが、リダイレクト時にクエリ部分が表示されてしまいます。
- リダイレクト後のURLに特定のクエリ部分を表示させないようにする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これでいかがでしょう。 ------------------------------------------------------------- RewriteEngine on RewriteBase /cgi/ RewriteRule ^pv/([0-z]+)\.html$ past/$1.html [R=301,L] # この行を追加 RewriteRule ^([0-z]+)/([0-z]+)\.html$ index.cgi?mode=$1&no=$2 ------------------------------------------------------------- R=301 は、ステータスコード 301 を指定 L は、このルールがマッチしたらURL変換を終える、という指定
その他の回答 (1)
- chaimasuka
- ベストアンサー率57% (26/45)
> 上記のpvの箇所をpastという風に変更したい 要するに、 http://example.com/cgi/past/1.html に対するリクエストを、 サーバ側で、http://example.com/cgi/index.cgi?mode=pv&no=1 として処理できるようにしたい という理解でよろしいでしょうか? だとすると、以下のように pv を直接梅今でしまってはいかがでしょう。 ------------------------------------------------------------- RewriteEngine on RewriteBase /cgi/ RewriteRule ^[0-z]+/([0-z]+)\.html$ index.cgi?mode=pv&no=$1 -------------------------------------------------------------
補足
ご回答ありがとうございます。 早速試させていただきましたが、解決できませんでした。 すいません、質問内容に誤った記述がありましたので訂正させて頂きます。 現時点で以下のようにアクセスできるURLを http://example.com/cgi/pv/1.html 以下のように/pv/の箇所を/past/へ変更したいという感じです。 http://example.com/cgi/past/1.html 実際には、 http://example.com/cgi/index.cgi?mode=pv&no=1 http://example.com/cgi/index.cgi?mode=past&no=1 この2つのURLで同じページにでアクセスできてしまうため、pastの方へ統一をしたいと思っています。 >Redirect permanentを使い、 >Redirect permanent /cgi/view/ http://example.com/cgi/past/ >としたところ、リダイレクトはされるのですが、 >http://example.com/cgi/past/1.html?mode=view&no=1 >となってしまいます。 >語尾のクエリ部分「?mode=view&no=1」が出ないようにしたいのですが、どのような方法があるか、ご教示頂けますと幸いです。 上記の/view/は/pv/の記述ミスでした。すいません。 実際には、Redirect permanentを使ってみると、 Redirect permanent /cgi/pv/ http://example.com/cgi/past/ ↓ http://example.com/cgi/past/1.html?mode=pv&no=1 となり、URL最後尾に「?mode=pv&no=1」が付加されるので、これを除去したいという事を望んでいます。 Redirect permanentではこうなるのが避けられないとしたら、別の方法があればご教示いただけますと幸いです。 よろしくお願いいたします。
お礼
ご返答が遅れてすいません。 ありがとうございます!希望の動作となりました。 RewriteRule ^([0-z]+)/([0-z]+)\.html$ index.cgi?mode=$1&no=$2 RewriteRule ^pv/([0-z]+)\.html$ past/$1.html [R=301,L] というように、記載する順を逆にしたことはあったのですが、それでもうまくいかず路頭に迷っていましたが、この記述の順序を逆にすればいいということを教えていただき助かりました! 本当にありがとうございました。