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

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

新規登録して質問してみよう
ただいま回答率
85.48%
.htaccess

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

Q&A

解決済

1回答

1075閲覧

WordPress httpsパラメータ付URLをリダイレクトさせたい

mina2001

総合スコア9

.htaccess

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

0グッド

0クリップ

投稿2018/07/12 04:21

編集2018/07/12 04:40

前提・実現したいこと

はじめまして
よろしくお願いします。

httpsを使用したパラメータ付URLのサイトの投稿を全てリダイレクトさせたいです。
.htaccessでどのように書けばよろしいでしょうか?

転送元:https://www.aaa.com/?xxx=123

転送先:https://www.aaa.com/bbb/ccc.html

?のパラメータがついてると上手く表示されません

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

発生している問題・エラーメッセージ

ページが表示されない

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

x_x

2018/07/12 04:25

「.htaccess」タグをつけてください。CSS3もHTML5も関係ないようです
mina2001

2018/07/12 04:26

わかりました。ご指摘ありがとうございます
guest

回答1

0

ベストアンサー

こんな感じでしょうか。

RewriteCond %{QUERY_STRING} .* RewriteCond %{HTTPS} on RewriteRule .* https://www.example.com/bbb/ccc.html? [R,L]

うまく行かなかった場合は、試したことも質問内容にかくといいでしょう。

(追記)
クエリ文字列によってリダイレクト先を変えたいとのこと。
クエリ文字列とリダイレクト先URIが一致しているのならバックリファレンスを使えます。
あと、クエリを消さないとリダイレクトがループします。
https://www.example.com/?xxx=123
https://www.example.com/bbb/123.html へリダイレクトするなら以下のような感じ。

RewriteCond %{QUERY_STRING} xxx=(\d+) RewriteCond %{HTTPS} on RewriteRule .* https://www.example.com/bbb/%1.html? [R,L]

クエリ文字列とリダイレクト先URIになんの関係もないのなら、一つづつ書くしかありません。

投稿2018/07/12 04:54

編集2018/07/12 05:55
rogueref

総合スコア727

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

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

mina2001

2018/07/12 05:11

コメント頂きありがとうございます。 以前の類似の質問 https://teratail.com/questions/25255 は試してみました。 初めての質問なので、ご指摘はありがたいです 今後は試した内容も書くことにします。 まずは、ご回答いただいた件を試してみます
mina2001

2018/07/12 05:17

?xxx=123 にあたる元のURLは記載しなくても大丈夫なのでしょうか 試す前に気になりました 今から試してみます
rogueref

2018/07/12 05:19

?以下のクエリはURIには含まれません。クエリ文字列が1文字以上あり、HTTPSでリクエストした場合に指定のURIに書き換えています。そういえば、フラグを書き忘れていました。 RewriteRule .* https://www.aaa.com/bbb/ccc.html [R,L] ですな。
mina2001

2018/07/12 05:32

別の人が作ったwpテーマの基本仕様で ?xxx=00 が各投稿についており、既に投稿した00の部分の数字が違うページが80ページほどあります。 サーバー移転をきっかけに、ドメインを変更せず/bbb/ccc.html と仕訳してURLを付け直しました 各ページを全部ひとつづつリダイレクトさせたいと思っています
mina2001

2018/07/12 05:47

試しに投稿の1ページで試してみたところ 下記が表示されました 同じ.htaccess内に RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] を記載している影響でしょうか? ------------------------------- このページは動作していません (サイトのドメイン) でリダイレクトが繰り返し行われました。 Cookie を消去してみてください. ERR_TOO_MANY_REDIRECTS
rogueref

2018/07/12 05:56

失礼しました。Rewrite後のURIからクエリを取り除かないとループしますね。 回答へ追記しています。
mina2001

2018/07/12 06:33

https://www.example.com/?x=123https://www.example.com/bbb/ccc.html にリダイレクトさせたいと思っています。 リダイレクト先の ccc.html は一つずつ手動で移転先を再投稿しました。サーバー移転に伴い自動パラメータ付のテーマも他に変えました(これは仕方なかったので・・・) ひとつのリダイレクトが成功出来たら、他も一つ一つ入力するつもりです
mina2001

2018/07/12 06:50

例えば元のURLの末尾が ?p=1 の場合 RewriteCond ccc {QUERY_STRING} ?p=1(\d+) RewriteCond ccc{HTTPS} on RewriteRule .* https://www.example.com/bbb/ccc.html? [R,L] になるのでしょうか?
rogueref

2018/07/12 06:54

querystringを決め打ちにするなら、 RewriteCond %{QUERY_STRING} p=1 でいいです。 ?は%{QUERY_STRING}には入りません。 バックリファレンスを利用しないのであれば、(\d+)の部分も不要です。 それにしても80個これを書くのであれば、それぞれのファイル名を(クエリ中の数字).htmlにしてもいいような気もします。
mina2001

2018/07/12 07:02

前に購入したテーマ、基本仕様でURLが自動設定でこちらでいじれなかったので、ドメイン+番号 しかできなくて、ドメイン+○○+番号にさえできなかったので、今のうちにクローラーがわかりやすいように変えた方がいい、という話を聞きまして・・・ この人、結構前からhttpsにしないと今後~という話をしてた人なので、まだページ数が(比較的)少ないうちにやっちゃおうと思いました ご指導いただいた点、試してみます
rogueref

2018/07/12 07:25

架空のドメインを使う場合、 www.example.comとかexample.jpとかを利用するのがマナーです。 実在のURIに(思わず)なったら迷惑をかけますから。 1)RewriteRule .* https://example.jp/bbb/ccc?[R,L] ?と[の間、スペース入っていますか? 2)直接https://example.jp/bbb/ccc をリクエストするとどうなりますか?  https://aaa.jp へリダイレクトされるのであれば、そのような設定が他にあると思われます。
mina2001

2018/07/12 07:37

1)のご指摘、スペースを入れる事でリダイレクト成功しました! ありがとうございます
mina2001

2018/07/12 08:11

嬉しくて、早速80ページコツコツと入力し始めまた 2ページ目を下記で入力した所、なぜか https:// example.jp/aaa/bbb.html(元のp=1に記述した内容)が表示されました。 大変申し訳ありませんが、2ページ目の記述はどのようにしたらよいでしょうか? RewriteCond %{QUERY_STRING} p=1 RewriteCond %{HTTPS} on RewriteRule .* https:// example.jp/aaa/bbb.html?[R,L] RewriteCond %{QUERY_STRING} p=2 RewriteCond %{HTTPS} on RewriteRule .* https://example.jp/aaa/ccc.html? [R,L]
rogueref

2018/07/12 08:22

また、RewriteRule .* https:// example.jp/aaa/bbb.html?[R,L] でスペースがないとか? RewriteCondは正規表現でマッチするので、 p=11とかp=12だと"p=1"にマッチしますね。 そういう場合は RewriteCond %{QUERY_STRING} "p=1$" と書いてみてください。
mina2001

2018/07/12 08:28 編集

なるほど、P=123 のような数字でしたので、 最初の記述を RewriteCond %{QUERY_STRING} "p=1$" にしてみます スペースは空いていました
mina2001

2018/07/12 08:31

"p=1$"とすることで、どちらのページも正確に表示することが出来ました 重ね重ねありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問