PHPと正規表現に関する質問です。


http://www.test.com/123/test.php?NUMBER=456

このURLを以下のようにmod_rewriteしたいです。
http://www.test.com/test.php?ID=123?NUMBER=456

このような正規表現はどう書けばいいでしょうか。




http://www.test.com/123/test.php

http://www.test.com/test.php?ID=123
にするには、
RewriteRule ^/(.*)/test.php$ test.php?ID=$1 [L]
で出来ました。ここから先がわかりません


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

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

ベストアンサー

id:Phize No.2

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

ポイント40pt

クエリ文字列(「?」以降)をくっつけるには、RewriteRuleにQSAフラグをくっつけるだけで大丈夫です。

RewriteRule ^/(.*)/test.php$ test.php?ID=$1 [L,QSA]

http://wiki.bit-hive.com/tomizoo/pg/mod_rewrite%20-%20QSA%A5%D5%...

id:tokyosmash

解説までありがとうございます。

こんなに簡単に出来るとは知りませんでした。

助かりました。

2007/11/06 15:50:29

その他の回答2件)

id:GoldenDawn No.1

回答回数426ベストアンサー獲得回数81

ポイント40pt

こんな感じでは。

RewriteRule ^/(.*)/test.php$ test.php?ID=$1 [QSA,L]
id:tokyosmash

ありがとうございます。無事に出来ました。

最後につける[L]は特に意味は無いと思ってたのですがそういうわけじゃないのですね。

2007/11/06 15:49:59
id:Phize No.2

回答回数1ベストアンサー獲得回数1ここでベストアンサー

ポイント40pt

クエリ文字列(「?」以降)をくっつけるには、RewriteRuleにQSAフラグをくっつけるだけで大丈夫です。

RewriteRule ^/(.*)/test.php$ test.php?ID=$1 [L,QSA]

http://wiki.bit-hive.com/tomizoo/pg/mod_rewrite%20-%20QSA%A5%D5%...

id:tokyosmash

解説までありがとうございます。

こんなに簡単に出来るとは知りませんでした。

助かりました。

2007/11/06 15:50:29
id:onotorape No.3

回答回数6ベストアンサー獲得回数0

ポイント15pt

このような場合は、2つの情報をそれぞれマッチさせるのがよいのでは無いでしょうか。

RewriteRule ^/(.*)/test.php(.*)$ test.php?ID=$1$2 [L]

(実験できてないですが、これでいいのでは?)

参考になるかどうか分かりませんが、次のような.htaccessを作成して運用しています


# BEGIN GIGAX_CNTL

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/?\~gigax/gigax\.jp/item([0-9]+)\.html$ /\~gigax/gigax\.jp/index.php?cmm=410&pmkey=$1 [L]

RewriteRule ^item([0-9]+)\.html$ index.php?cmm=410&pmkey=$1 [L]

RewriteRule ^shop([\w0-9]+)\.html$ index.php?cmm=3&pmkey=$1 [L]

RewriteRule ^enq([\w0-9]+)-([\w0-9]+)\.html$ enq.php?n=$1&mode=$2 [L]

RewriteRule ^enq([\w0-9]+)\.html$ enq.php?mode=$1 [L]

RewriteRule ^blog/new/?$ /blog.php?cmm=9 [L]

RewriteRule ^blog/([0-9]+)/pn([0-9]+)/?$ /blog.php?cmm=20&bno=$1&pn=$2 [L]

RewriteRule ^blog/([0-9]+)/([0-9]{4})-([0-9]{2})-([0-9]{2})/?$ /blog.php?cmm=22&bno=$1&date=$2-$3-$4 [L]

RewriteRule ^blog/([0-9]+)/back/([0-9]+)/([0-9]+)/?$ /blog.php?cmm=81&bno=$1&nowyear=$2&nowmonth=$3 [L]

RewriteRule ^blog/([0-9]+)/next/([0-9]+)/([0-9]+)/?$ /blog.php?cmm=82&bno=$1&nowyear=$2&nowmonth=$3 [L]

RewriteRule ^blog/([0-9]+)/back/?([0-9\/]+)$ /blog.php?cmm=20&bno=$1 [L]

RewriteRule ^blog/([0-9]+)/next/?([0-9\/]+)$ /blog.php?cmm=20&bno=$1 [L]

RewriteRule ^blog/([0-9]+)/([0-9]+)/?$ /blog.php?cmm=21&bno=$1&kno=$2 [L]

RewriteRule ^blog/([0-9]+)/?$ /blog.php?cmm=20&bno=$1 [L]

RewriteRule ^blog/?$ blog.php [L]

RewriteRule ^sevttop\.html$ sevt.php [L]

RewriteRule ^sevt([0-9]+)\.html$ sevt.php&cmm=1&sevtmno=$1 [L]

</IfModule>

# END GIGAX_CNTL<<

http://gigax.jp

id:tokyosmash

回答ありがとうございます。

今回は上のお二方の方法がシンプルだったのでそちらにしました。

2007/11/06 15:52:00
  • id:tokyosmash
    みなさん回答ありがとうございます。
    無事に解決いたしましたのでいったん閉じさせて頂きます。

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

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

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

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