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

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]
で出来ました。ここから先がわかりません


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


●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード:mod_rewrite PHP test URL 正規表現
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● GoldenDawn
●40ポイント

こんな感じでは。

RewriteRule ^/(.*)/test.php$ test.php?ID=$1 [QSA,L]
◎質問者からの返答

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

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


2 ● Phize
●40ポイント ベストアンサー

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

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

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

◎質問者からの返答

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

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

助かりました。


3 ● onotorape
●15ポイント

このような場合は、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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



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