質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

1回答

2342閲覧

【.htaccess】パラメータ付きURLからパラメータ付きURLへのリダイレクト設定について

k.k.

総合スコア11

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2018/02/07 00:20

編集2018/02/07 06:23

.htaccessでのリダイレクト設定について、質問です。
初歩的な内容でしたらすみません。

現在、.htaccessでリダイレクトを設定しているところなのですが、
パラメータ付きURLからパラメータ付きURLへのリダイレクト設定がどうしても分からず、困っています。
お力を貸していただければ幸いです。

具体的なリダイレクトのイメージは下記の通りです。

aaa.com/cbbb/ccc.html?class=ddd&word= ↓ aaa.com/?eee=fffff

同じドメイン内で、旧サイトから新サイトに301リダイレクトさせたいです。

また、パラメータ付きURLに規則性が低い為、
個別に設定できるような記述方法だと助かります。

不足している情報があれば、教えていただければ補足いたします。

宜しくお願い申し上げます。

<補足>
上記の場合の方法は解決しましたが、
リダイレクト後の文字列に「%」が含まれている場合にうまくリダイレクトされません...。
[NE,QSA,R=301,L]も試しましたが、だめでした...。

ご存知の方がいらっしゃいましたら、お教えいただきたいです。

よろしくお願いします。

<補足2>
上記の「%」が正常に読み込まれない問題は解決しましたが、
数字がリダイレクトされると他の数字に変わってしまう問題が発生しました。
例えば、下記のような感じです。

・表示させたいURL
http://aaa.com/?bbb=jsearch&ct%5B%5D=260

・現在表示されているURL
http://aaa.com/?bbb=jsearch&ct%80B%80D=209

.htaccessに記述した数字がリダイレクト時に勝手に変更になるなんてことがあるのでしょうか...?

解決方法がわかる方がいらっしゃいましたら、是非お教えいただきたいです。

よろしくお願いします。

<補足3>
↑補足2の問題は試験的に記述していた他の記述が邪魔していただけでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

mod_rewriteでURIを書き換える場合、クエリ文字列はデフォルトで引き継がれます。
したがって、URI部分だけをrewriteしてあげればOKです。

単純にクエリを引き継いでリダイレクトする場合はこんな感じ。

apache

1RewriteCond %{REQUEST_URI} ^/cbb/ccc.html 2RewriteRule .* / [R=301,L]

上記例の様にクエリ文字列、パラメタ両方とも変更する場合はrewrite前のクエリを削除して新しくつければいいでしょう。
RewriteRuleの後ろに?をつければ、rewrite前のクエリ文字列は削除されます。

apache

1RewriteCond %{REQUEST_URI} ^/cbb/ccc.html 2RewriteCond %{QUERY_STRING} class=ddd 3 4RewriteRule .* /?eee=fffff [R=301,L]

試験はしていませんが、参考になれば。

投稿2018/02/07 01:10

rogueref

総合スコア727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.k.

2018/02/07 02:22

さっそくご回答いただきまして、ありがとうございます。 お教えいただきました、 RewriteCond %{REQUEST_URI} ^/cbb/ccc.html RewriteCond %{QUERY_STRING} class=ddd RewriteRule .* /?eee=fffff [R=301,L] この方法でうまく動作しました。 が、リダイレクト後の文字列に「%」が入っている場合にうまく動きませんでした...。 [R=301,L]部分を[NE,QSA,R=301,L]にしてみましたが、 「%」が読み込まれず...。 方法をご存知でしたらお教えいただきたいです。 お忙しいところ申し訳ありません。。。
miyabi_takatsuk

2018/02/07 02:29 編集

横槍失礼します。 ¥% とエスケープしたらどうでしょう? (¥は逆スラッシュ) %は演算用の文字列なので、そのままだとうまくいかない場合ありますよー
rogueref

2018/02/07 02:28

RewriteRuleや、RewriteCondでは'%'は特殊文字ですので、クエリ文字列などで利用する場合はエスケイプする必要があるのではないかと。 RewriteCond .* /?ho\%ge=fuga とか。
k.k.

2018/02/07 03:05

そうですね...。特殊文字はエスケープすべきでした...。 初歩的なところを見落としていました...。すみません。 エスケープによって「%」は読み込まれるようになったのですが、 なぜか.htaccessに記述した数字と違う数字がURLに読み込まれてしまいます。 .htaccessに記述した数字が勝手に変わるなんてことがあるのでしょうか...? (調べましたがそういった事例が見つかりませんでした) 続けざまで申し訳ありませんが、ご存知でしたらお教え頂きたいです...。
rogueref

2018/02/07 04:02

おそらく期待したものと違うRewriteCondにマッチしているのではないかと。 実際に設定した内容を提示すると原因もわかるかもしれません。
k.k.

2018/02/07 04:16

ご返信いただきまして、ありがとうございます。 実際の設定は下記のとおりです。 <.htaccessの記述> RewriteCond %{REQUEST_URI} ^/aaa/bbb.html RewriteCond %{QUERY_STRING} class=xxxxxxxx&word= RewriteRule .* /?cccccccc=jsearch&ct\%5B\%5D=260 [R=301,L] <表示されるURL> http://aaa.com/?cccccccc=jsearch&ct%80B%80D=209 分かりますでしょうか...? .htaccess関係は素人同然の為、ちんぷんかんぷんでして...。 申し訳ありません...。
rogueref

2018/02/07 04:49 編集

%はURIエンコードですな。%5B%5Dは"[]'なのでそのまま書けばいいかと。 RewriteRule .* /?cccccccc=jsearch&ct[]=260 [R=301,L]
k.k.

2018/02/07 05:16

ご回答いただきまして、ありがとうございます。 お教えいただいた、 RewriteRule .* /?cccccccc=jsearch&ct[]=260 [R=301,L] に変更いたしましたが、表示が変わりませんでした...。
rogueref

2018/02/07 05:18

おそらくブラウザキャッシュです。 プライベートウィンドウや、別ブラウザで試してみましょう。
k.k.

2018/02/07 05:34

すみません、他のとこに試験的に買いた記述が邪魔してました! 無事に全問題が解決いたしました! ご協力いただき、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問