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

mod_rewriteを用いて、動的に生成されたURLを携帯用のURLに変換してジャンプさせたいと考えています。
正規表現を使うことは分かったのです、正規表現に疎く、書き方でつまずいています。
.htaccessにどのように記載したらよいのでしょうか。お知恵をお借りできれば幸いです。
※変更箇所2箇所のみです。1)shop.cgi→k_shop.cgi 2)&mode=p_wide→&mode=detail
▼変更前
http://www.example.com/shop/shop.cgi?order=&class=&keyword=&FF=&price_sort=&pic_only=&mode=p_wide&id=210&superkey=1
▼変更後
http://www.example.com/shop/k_shop.cgi?order=&mode=detail&id=210

●質問者: icta
●カテゴリ:ウェブ制作
✍キーワード:.htaccess CGI mod_rewrite Op. URL
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● nandedarou
●70ポイント

「変更前」のURLとして書かれている部分で、アクセスする度に変化する可能性があるのは、「210」だけでしょうか?そうだとすると、次のように書けばよいと思います。

RewriteEngine on

RewriteRule ^shop/shop.cgi?order=&class=&keyword=&FF=&price_sort=&pic_only=&mode=p_wide&id=(.*)&superkey=1/$ shop/k_shop.cgi?order=&mode=detail&id=$1 [L]

※変換前の「(.*)」の位置にある文字列や数字が、変換後の「$1」に代入されます。

◎質問者からの返答

文字制限で書ききれなかったのですが、「&class=&keyword=&FF=&price_sort=&pic_only=」と「&superkey=1」はアクセスする度に値が入ったりして変化する可能性があります。この場合はどのようにしたらよいでしょうか?


2 ● nandedarou
●70ポイント

id以外は、変換後のアドレスに反映させなくてよいのでしょうか?

そうならば、変化する可能性のある部分に「.*」を書いて下さい。

RewriteEngine on

RewriteRule ^shop/shop.cgi?order=&class=.*&keyword=.*&FF=.*&price_sort=.*&pic_only=.*&mode=p_wide&id=(.*)&superkey=.*/$ shop/k_shop.cgi?order=&mode=detail&id=$1 [L]

※変換後のアドレスに代入したい部分は、「.*」ではなく、「(.*)」にして下さい。変換前のアドレス中()で括った部分は、前から順に変換後のアドレスの$1,$2,$3…に代入されます。


3 ● nandedarou
●70ポイント

id以外は、変換後のアドレスに反映させなくてよいのでしょうか?

そうならば、変化する可能性のある部分に「.*」を書いて下さい。

RewriteEngine on

RewriteRule ^shop/shop.cgi?order=&class=.*&keyword=.*&FF=.*&price_sort=.*&pic_only=.*&mode=p_wide&id=(.*)&superkey=.*/$ shop/k_shop.cgi?order=&mode=detail&id=$1 [L]

※変換後のアドレスに代入したい部分は、「.*」ではなく、「(.*)」にして下さい。変換前のアドレス中()で括った部分は、前から順に変換後のアドレスの$1,$2,$3…に代入されます。

◎質問者からの返答

id以外は、変換後のアドレスに反映しません。

教えていただいたとおりに記載したのですが、うまく変換しません。予約語に¥をつけてみましたが同様でした。

▼以下は質問前に記載していた内容です。この場合だとk_shop.cgiには書き換わります。

RewriteRuleに正規表現をいろいろ追加してみたのですがどれも駄目でした。

そもそも以下の書き方に問題があるのではないかと疑っています。

何か間違いがありましたら教えていただけませんでしょうか。よろしくお願いします。

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} ^DoCoMo

RewriteCond %{REQUEST_FILENAME} shop/shop

RewriteRule shop/shop\.cgi$ http://www.example.com/shop/k_shop\.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^vodafone

RewriteCond %{REQUEST_FILENAME} shop/shop

RewriteRule shop/shop\.cgi$ http://www.example.com/shop/k_shop\.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^KDDI

RewriteCond %{REQUEST_FILENAME} shop/shop

RewriteRule shop/shop\.cgi$ http://www.example.com/shop/k_shop\.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^J-PHONE

RewriteCond %{REQUEST_FILENAME} shop/shop

RewriteRule shop/shop\.cgi$ http://www.example.com/shop/k_shop\.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^Up.Browser

RewriteCond %{REQUEST_FILENAME} shop/shop

RewriteRule shop/shop\.cgi$ http://www.example.com/shop/k_shop\.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^ASTEL

RewriteCond %{REQUEST_FILENAME} shop/shop

RewriteRule shop/shop\.cgi$ http://www.example.com/shop/k_shop\.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^DDIPOCKET

RewriteCond %{REQUEST_FILENAME} shop/shop

RewriteRule shop/shop\.cgi$ http://www.example.com/shop/k_shop\.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^DoCoMo

RewriteRule ^$ http://www.example.com/m/index.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^vodafone

RewriteRule ^$ http://www.example.com/m/index.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^KDDI

RewriteRule ^$ http://www.example.com/m/index.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^J-PHONE

RewriteRule ^$ http://www.example.com/m/index.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^Up.Browser

RewriteRule ^$ http://www.example.com/m/index.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^ASTEL

RewriteRule ^$ http://www.example.com/m/index.cgi [R]

RewriteCond %{HTTP_USER_AGENT} ^DDIPOCKET

RewriteRule ^$ http://www.example.com/m/index.cgi [L]


4 ● nandedarou
●70ポイント

なんとか、うまくいく方法を見つけました。

そのままコピーして、.htaccessに貼り付け、その.htaccessを、shopフォルダに置いて下さい

(※shopフォルダより1つ上位のフォルダにおく場合は、4箇所に

「shop/」と書く必要があります。どこかわからない場合は聞いて下さい。)

RewriteEngine on

RewriteRule ^shop.cgi %{QUERY_STRING}

RewriteRule ^.*&mode=p_wide&id=([^&]*).*$ k_shop.cgi?order=&mode=detail&id=$1 [L]

※回答欄に書くほどのことではない追加情報は、このページ下の「この質問・回答へのコメント」に書きますので、見て下さい。

◎質問者からの返答

希望通りに動作いたしました。

1週間近く悩んでいたので解決できて大変うれしいです。

丁寧に教えていただき本当にありがとうございました。

関連質問


●質問をもっと探す●



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