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]


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

よろしお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/25 11:57:29
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:oil999 No.2

回答回数1728ベストアンサー獲得回数320

ポイント50pt

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

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

どうもありがとうございます。

試してみたところ、うまくいきませんでした。
初めの?以降がそのままあとにくっついてきています。

リライト後のURL
http://xxx.com/moto/xx?a=xx&b=yy

2012/10/24 14:50:32
id:papa-tomo No.3

回答回数362ベストアンサー獲得回数107

ポイント50pt

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


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

他4件のコメントを見る
id:papa-tomo

う~ん、ルールの全体を見てみないとなんとも分かりませんね

2012/10/25 10:57:58
id:onigirin

いろいろ調べてみたところ、

RewriteRule ^moto\.cgi$ /moto/%1? [R=307,L]

と、最後に?を付けることで、クエリーの引き継ぎを止めることができました。
上のNo.2の正規表現と組み合わせて、求める結果がでました。

どうもありがとうございました!

2012/10/25 11:56:42

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません