人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

htaccessの正規表現について質問です。

元URLが下記のものを、

http://xxx.com/moto.cgi?a=xx&b=yy
http://xxx.com/moto.cgi

新しく下記のように書き換えたいと思っています。

http://xxx.com/moto/xx
http://xxx.com/moto/

今は

http://xxx.com/moto/xx&b=yy

と、全ての?以降をそのまま移行することはできていますが、余計な&b=yyを消せずにいます。

今は正規表現は下記のようなものを書いています。

RewriteCond %{QUERY_STRING} ^a=(.*)$
RewriteRule ^moto\.cgi$ /moto/%1 [R=307,L]


いろいろいじってますが、うまくいかないので、意見頂けると助かります。

よろしお願いします。

●質問者: onigirin
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● みかん
●0ポイント

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1114537126


2 ● oil999
●50ポイント

これを試してみてください。

RewriteCond %{QUERY_STRING} a=([^\&]+)
RewriteRule ^moto\.cgi$ /moto/%1 [R=307,L]

onigirinさんのコメント
どうもありがとうございます。 試してみたところ、うまくいきませんでした。 初めの?以降がそのままあとにくっついてきています。 リライト後のURL http://xxx.com/moto/xx?a=xx&b=yy

3 ● パパトモ
●50ポイント

RewriteCond %{QUERY_STRING} ^a=(\w+)
RewriteRule ^moto\.cgi$ /moto/%1 [R=307,L]


これならどうでしょうか?


パパトモさんのコメント
>> RewriteCond %{QUERY_STRING} ^a=(\w*) << ↑これの方が目的に合っているかも・・・

onigirinさんのコメント
どうもありがとうございます。 2番の時と同じ結果になりました。 ここで気付きましたが、最後に「?a=xx&b=yy」という、元々の引数がくっついているのが問題なので、もしかすると使っているフレームワーク側で勝手に引き継いでいる気がしてきました。 先にこちらを記述しているのですが、正規表現ではない部分が問題になっていそうですみません。

パパトモさんのコメント
全てがくっついてくるのは、なんか変ですね。まるでQSAフラグが有効になっているような状態ですね。 >> RewriteCond %{QUERY_STRING} ^a=(\w*)(.*)$ RewriteRule ^moto\.cgi$ /moto/%1 [R=307,L] << としても駄目かな?

onigirinさんのコメント
どうもありがとうございます。 前回と同じ結果となりました。 QSAフラグで調べてみました。 今回のリライトルールの下、一番最後のリライトルールに、フレームワークのリライトルールがあります。 そこで、クエリーを引き継ぐ内容で、QSAリライトして[QSA,L]となって終わっていますが、これが原因かもしれませんね。 プログラム側で、余計なクエリーが入っていたら自動的にクエリー無しへリダイレクトさせるしか方法が無いのですかねえ・・・。 実害が無いとはいえ、なんだか気になる状態です。

パパトモさんのコメント
う〜ん、ルールの全体を見てみないとなんとも分かりませんね

onigirinさんのコメント
いろいろ調べてみたところ、 RewriteRule ^moto\.cgi$ /moto/%1? [R=307,L] と、最後に?を付けることで、クエリーの引き継ぎを止めることができました。 上のNo.2の正規表現と組み合わせて、求める結果がでました。 どうもありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ