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

.htaccessでのリダイレクトの質問です。

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の後が一文字変わっただけです。



正規表現の書き方がわからないのです。
よろしくお願いします。

●質問者: seadwell
●カテゴリ:ウェブ制作
✍キーワード:.htaccess URL いもの パラメータ リダイレクト
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● y-kawaz
●30ポイント

前者

RewriteRule (.*) $1?wcat1=w [QSA]

後者

RewriteRule (.*)wcat=0(.*) $1wcat1=w$2

凄くシンプルに書くとこんな感じでしょうか。

前者はパラメータを追加するだけなので QSA フラグを使うと簡単に書けます。このフラグの使い方に関してはぐぐればわかりやすく説明しているページは見つかります。

後者は、wcatが0以外のケースがある場合や、xwcat といった wcat で終わる別のパラメータがある場合は少し修正がいるでしょうが、これで十分であればそのまま使えると思います。

◎質問者からの返答

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

QSAに関して調べてみます。


2 ● nandedarou
●20ポイント

●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';
}

3 ● nandedarou
●100ポイント

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に書いてあることや、実際、クエリがあるはずなのに静的ページに見えているのはなんなんだろう???

と頭をひねりながら、よく解らないまま放置していました・・・。

今度は、私なりに教えていただいたことを基本にいろいろトライしてみます。

ありがとうございました^^/

関連質問


●質問をもっと探す●



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