プロが教えるわが家の防犯対策術!

.htaccessにて、Perlで作成されたスクリプトのURLを以下のようにmod_rewriteで変換を行っています。

RewriteEngine on
RewriteBase /cgi/
RewriteRule ^([0-z]+)/([0-z]+)\.html$ index.cgi?mode=$1&no=$2

通常の場合、
http://example.com/cgi/index.cgi?mode=pv&no=1
といったURLが、mod_rewriteにて
http://example.com/cgi/pv/1.html
というURL形式でアクセスが可能です。

そこでやりたい事なのですが、上記のpvの箇所をpastという風に変更したいと思っています。
http://example.com/cgi/pv/1.html

http://example.com/cgi/past/1.html

スクリプト側の問題かも知れませんが、過去ログに移行したデータなどはpastになるのですが、何故かpv(現行ログ)でもアクセス出来てしまいまして、出来れば.htaccessで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」が出ないようにしたいのですが、どのような方法があるか、ご教示頂けますと幸いです。
RewriteCond %{QUERY_STRING}なども調べて見たのですが、詳しくどう記述すれば良いかわかりませんでした。

よろしくお願いいたします。

A 回答 (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変換を終える、という指定
    • good
    • 0
この回答へのお礼

ご返答が遅れてすいません。
ありがとうございます!希望の動作となりました。

RewriteRule ^([0-z]+)/([0-z]+)\.html$ index.cgi?mode=$1&no=$2
RewriteRule ^pv/([0-z]+)\.html$ past/$1.html [R=301,L]

というように、記載する順を逆にしたことはあったのですが、それでもうまくいかず路頭に迷っていましたが、この記述の順序を逆にすればいいということを教えていただき助かりました!

本当にありがとうございました。

お礼日時:2007/11/23 03:30

> 上記の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ではこうなるのが避けられないとしたら、別の方法があればご教示いただけますと幸いです。
よろしくお願いいたします。

補足日時:2007/11/16 19:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!