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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

リダイレクト

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

3回答

4490閲覧

htaccess複数ページのパラメーター付きとそうでないものを含んだ301リダイレクトについて

webwebweb

総合スコア8

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

リダイレクト

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

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2018/02/23 07:32

編集2018/02/24 08:21

前提・実現したいこと

お世話になります。

ECショップを担当している者からの質問です。

ドメイン同一(ドメイン切替)で
ショップサーブからフューチャーショップへ移転を行いました。
そこで、エンドユーザーのお気に入り登録などの対策として、
ショップサーブの時のURLをフューチャーショップでの同一内容ページへリダイレクト
をかけたいと考えております。

htaccessにリダイレクトの記述をしたのですが、
移転元URLにパラメーターが付いたURLはリダイレクトされず、

パラメーター付きリダイレクトについて記述された
当サービスの下記のページを拝見しましたが、
掲載内容のように追記してもうまくいかず、
お分かりになる方がいらっしゃれば、お助けいただけたら幸いです。
https://teratail.com/questions/44099

下記その1、その2のようなやり方を試してみましたが、
当方htaccessのコードは理解することができず、
ネットで調べ持って記述をしているため、
どこが見当違いな書き方をしているなどが全くわかりません。

お詳しい方がいらっしゃいましたらお助け願えないでしょうか。

現在記述しているhtaccess その1

----------htaccessに記述している内容--------------
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

(▼リダイレクトに成功している行▼)
Redirect 301 /SHOP/mmmmmm.html https://www.aaa.com/bb/ccc/mmmmmm
Redirect 301 /SHOP/nnn.html https://www.aaa.com/bb/ccc/nnn


(▲リダイレクトに成功している行END▲)
(上記行に続いて)
(▼リダイレクトができていない行▼)
Redirect 301 /smp/list.php?type=class&mcat=YYYYYYY https://www.aaa.com/bb/ccc/d/EEEEE
Redirect 301 /smp/list.php?type=class&mcat=ZZZZZZZ https://www.aaa.com/bb/ccc/d/FFFFF


(▲リダイレクトができていない行END▲)

ErrorDocument 404 /404.html


Redirect 301の行は720行ほどあります。
404が最終行で、404も成功しております。

現在記述しているhtaccess その2

こちらのページにも
https://teratail.com/questions/25255
パラメーター付きのリダイレクトについて記述がございましたので、
こちらの記述方法でも記述してみました。

----------htaccessに記述している内容--------------
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

(▼リダイレクトができていないパラメーター付きのURL▼)
RewriteEngine on
RewriteCond %{QUERY_STRING} ^?type=class&mcat=YYYYYYY$
RewriteRule /smp/list.php https://www.aaa.com/bb/ccc/d/EEEEE? [R=301,L]
RewriteEngine on
RewriteCond %{QUERY_STRING} ^?type=class&mcat=ZZZZZZZ$
RewriteRule /smp/list.php https://www.aaa.com/bb/ccc/d/FFFFF? [R=301,L]



(▲リダイレクトができていないパラメーター付きのURL END▲)

(▼パラメーターがついていないURLが以下ずらっと並び
リダイレクトに成功している行▼)
Redirect 301 /SHOP/mmmmmm.html https://www.aaa.com/bb/ccc/mmmmmm
Redirect 301 /SHOP/nnn.html https://www.aaa.com/bb/ccc/nnn


(▲リダイレクトに成功している行END▲)

ErrorDocument 404 /404.html


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

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

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

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

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

guest

回答3

0

FSサポートの方が検討くださり、下記のような設定で解決することができました。

例)/smp/list.php?type=class&mcat=YYYYYYY → https://www.aaa.com/bb/ccc/d/EEEEE

RewriteEngine on (←冒頭1行目のみ)

RewriteCond %{QUERY_STRING} ^type=class&mcat=YYYYYYY$
RewriteCond %{REQUEST_URI} ^/smp/list.php [NC]
RewriteRule ^(.*)$ https://www.aaa.com/bb/ccc/d/EEEEE? [R=301,L]

こちらでもご検討、ご助言くださった方々、誠にありがとうございました。

投稿2018/05/30 02:06

webwebweb

総合スコア8

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

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

0

ベストアンサー

Redirectでも、mod_rewriteでのRewriteRuleでもそうですが、クエリ文字列(?から後ろの文字列)はURIではありません。質問で挙げられているようなクエリ文字列をキーにした書き換えはmod_rewriteを利用するしかありません。

/smp/list.php?type=class&mcat=YYYYYYY → https://www.aaa.com/bb/ccc/d/EEEEE /smp/list.php?type=class&mcat=ZZZZZZZ → https://www.aaa.com/bb/ccc/d/FFFFF

これだと、URIを書き換えた上で、クエリ文字列を取り除くようなので以下のような記述になるかと。

apache

1RewriteEngine On 2RewriteCond %{REQUEST_URI} ^/smp/list.php 3RewriteCond %{QUERY_STRING} mcat=YYYYYYY 4RewriteRule .* https://www.aaa.com/bb/ccc/d/EEEEE? [R=301,L] 5 6RewriteCond %{REQUEST_URI} ^/smp/list.php 7RewriteCond %{QUERY_STRING} mcat=ZZZZZZ 8RewriteRule .* https://www.aaa.com/bb/ccc/d/FFFFF? [R=301,L]

%{QUERY_STRING}は?以下のどこでもマッチすればいいので、上記でいける。。と思います。
いまさらかもしれませんが、クエリの引数部分を新しいURIの一部として利用するようにしておけば、もっと単純な短いルールですんだかもしれません。

apache

1RewriteCond %{REQUEST_URI} ^/smp/list.php 2RewriteCond %{QUERY_STRING} mcat=(.*)$ 3RewriteRule .* https://www.aaa.com/bb/ccc/d/%1? [R=301,L]

とか。

投稿2018/02/28 05:42

rogueref

総合スコア727

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

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

webwebweb

2018/03/02 03:31

rogueref様 リアクションが遅くなり申し訳ございません。 ご回答誠にありがとうございます。 こちらで試してみます。記述してみて成功したかをまた報告させていただきます。 丁寧な解説ありがとうございます。
webwebweb

2018/03/02 11:19

rogueref様 わかりやすく丁寧なご解説ありがとうございました。 下記のようにご助言いただいたように試みてみましたが、やはり飛びませんでした。 ここまでご助言いただいたのに成功しないのは、フューチャーショップになんらかの仕様上の理由があるのかとも思います。 ご親切に検討いただきありがとうございました。 RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteEngine on (←知識がないのですが、自分なりに考えて上部と被っていたので、これを取ってみたりもしましたが飛びませんでした。) RewriteCond %{REQUEST_URI} ^/smp/list.php RewriteCond %{QUERY_STRING} mcat=1003076 RewriteRule .* https://www.aaa.com/fs/shopid/c/0000000134? [R=301,L] (▼以下質問欄と同様▼)
guest

0

RewriteCond %{QUERY_STRING} の「^?type=...」を「^type=...」にするとどうでしょうか?

投稿2018/02/25 09:05

TaichiYanagiya

総合スコア12146

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

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

webwebweb

2018/02/26 00:27

TaichiYanagiya様 ご回答誠にありがとうございます。 「^?type=...」の「?」を取ってみましたが、やはり飛びませんでした。 ややこしい内容にもかかわらず、ご検討ご回答いただきありがとうございます。 自分でも継続的に原因追及をしておりますが、 もし、また他の要因が思いつくことがございましたら、 ご都合よければ、ご助言していただけると幸いです。 このたびは、コメントありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問