http://www.hoge.com/web/list.php?pCon=wcat&Cat=%E6%AD%A3%E6%9C%88
上記のようなURLだったのですが、パラメーターを追加したことによりURLが変わってしまいました。
wcat1=wが追加されたのです。
以下のページへリダイレクトしたいのですが、動的ページですので正規表現を使ってリダイレクトできないものでしょうか?
http://www.hoge.com/web/list.php?wcat1=w&pCon=wcat&Cat=%E6%AD%A3%E6%9C%88
また、以下の場合はどうなるでしょう?
http://www.hoge.com/word/category.php?wcat1=0&wcat2=0&wcat3=0&Cat=%E6%99%AE%E9%80%9A
↓
http://www.hoge.com/word/category.php?wcat1=w&wcat2=0&wcat3=0&Cat=%E6%99%AE%E9%80%9A
パラメーターwcat1の後が一文字変わっただけです。
正規表現の書き方がわからないのです。
よろしくお願いします。
前者
RewriteRule (.*) $1?wcat1=w [QSA]
後者
RewriteRule (.*)wcat=0(.*) $1wcat1=w$2
凄くシンプルに書くとこんな感じでしょうか。
前者はパラメータを追加するだけなので QSA フラグを使うと簡単に書けます。このフラグの使い方に関してはぐぐればわかりやすく説明しているページは見つかります。
後者は、wcatが0以外のケースがある場合や、xwcat といった wcat で終わる別のパラメータがある場合は少し修正がいるでしょうが、これで十分であればそのまま使えると思います。
●1つ目のご質問のケース
.htaccessに次のように書いてはどうでしょうか
※list.phpがあるディレクトリ(フォルダ)に.htaccessがあり、それに書く場合です。
※下記の「QSA」は、クエリ文字列(「?」以降の文字列)を付け足すことを意味します。
RewriteEngine on RewriteRule ^list.php$ list.php?wcat1=w [QSA,L]
●2つ目のご質問のケース
※mod_rewriteで、クエリ文字列の内容を書き換えることができないようです。
(↑違ったらごめんなさい)
そこで、category.phpの最初に次のように書いてはどうでしょうか?
if($_GET['wcat1']==='0'){ $_GET['wcat1']='w'; }
2つ目の質問についての回答で、mod_rewriteではできないようだと書きましたが、次のようにすれば、リライトできます。(以前、考えたのを思い出しました。)
※以下は、category.phpの入っているディレクトリにある.htaccessに書く場合です。
RewriteEngine on RewriteRule ^category\.php$ category.php%{QUERY_STRING} RewriteRule ^category\.php(.*)wcat=0(.*)$ category.php?$1wcat=w$2 [L]
解説します。
RewriteRuleは、URLの「?」以降を切り取って、正規表現によるマッチングを行います。
URLの「?」以降(「?」は含みません)は、%{QUERY_STRING}に代入されています。
このままだと、「?」以降の文字列を正規表現でマッチングできません。
そこで、2行目でクエリ文字列を付加しています。
この段階で、最初のURLから、「?」だけ除去された形になります。
3行目で、クエリ文字列部分の「wcat=0」を「wcat=w」に書き換えて、「?」を付加しています。
コメントに渡る細かくご丁寧なご回答ありがとうございます。
http://q.hatena.ne.jp/1193484906の前回もコメントいただいていたのですね。
まことに恐縮なのですが、コメントに気付いていませんでした><
申し訳ありませんm(_ _)m
レンタルサーバー(Xサーバー)より、『PHPの仕様によりご希望には添えません』なる返事をが来ましたので、ではいろんなWEBに書いてあることや、実際、クエリがあるはずなのに静的ページに見えているのはなんなんだろう???
と頭をひねりながら、よく解らないまま放置していました・・・。
今度は、私なりに教えていただいたことを基本にいろいろトライしてみます。
ありがとうございました^^/
早速のご回答ありがとうございます。
QSAに関して調べてみます。