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/04 22:47:56
  • 終了:2007/11/06 15:53:02

ベストアンサー

id:Phize No.2

Phize回答回数1ベストアンサー獲得回数12007/11/04 23:12:56

ポイント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

GoldenDawn回答回数426ベストアンサー獲得回数812007/11/04 23:02:29

ポイント40pt

こんな感じでは。

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

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

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

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

Phize回答回数1ベストアンサー獲得回数12007/11/04 23:12:56ここでベストアンサー

ポイント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

onotorape回答回数6ベストアンサー獲得回数02007/11/04 23:50:28

ポイント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
    みなさん回答ありがとうございます。
    無事に解決いたしましたのでいったん閉じさせて頂きます。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません