質問: 以下の旧URLに来た場合、301リダイレクトで新URLへ転送したいのですが、 .htaccessのRewriteRuleはどのように書けばいいでしょうか? いろいろ試していますが、 うまくいきません。アドバイスいただければ幸いです。 旧URL `https://example.com/stay/db/database.cgi?cmd=dp&num=1234&dp=ad.html` 新URL `https://example.com/stay/db/database.cgi?cmd=dp&num=1234&dp=all.html` 【条件追記】上記新旧URLに書きました「1234」という部分は、実は複数あるうちの一つでして、他に「2354」になったURLもあります。この数字が「1234」の時だけリダイレクトしたいのです。 【テスト結果】 URLが新URLへリダイレクトされましたが、以下のエラー画面が出て、 「このページは動作していません 「ドメイン名」でリダイレクトが繰り返し行われました。Cookie を消去してみてください. ERR_TOO_MANY_REDIRECTS」 新URL の画面が表示されなくなりました。(代わりに上記エラー画面が出ます) (Cookie を消去してみましたが同じで上記エラー画面が出ます) 【成功しました】 1234があるとリダイレクトし続けるようなので、以下のようにしましたら無事成功しました。 RewriteEngine on RewriteCond %{REQUEST_URI} !=/stay/db/database.cgi?cmd=dp&num=1234&dp=all.html RewriteCond %{QUERY_STRING} &num=1234&dp=ad.html RewriteCond %{QUERY_STRING} ^(.*&dp)=(.+)$ RewriteRule .* {HTTP_HOST}%{REQUEST_URI}?%1=all.html [R=301,L] アドバイスありがとうございました。感謝です。 上記結果で、何か不備がありましたら、ご教示をよろしくお願いいたします。
回答: これで通じますかね? また、恐らくサンプルURLだとおもいますが、構造が全く同じであればこれでいけると思います。 一度試して、問題が無ければ`R=301`へ変更してください。 **追記** 基本的に条件が増えた場合は`RewriteCond`を増やせば問題ありません。 また、質問文を見て他の人が回答できるように質問してください。 質問する際は次のページが参考になります。 最小限の・自己完結した・確認可能なサンプルコードの書き方 (同ページにリダイレクトした場合にall.htmlは除外する条件を追加) ``` # Rewriteモジュールが導入されている場合のみ処理 # Rewriteモジュールを有効化 RewriteEngine on # 条件定義1 RewriteCond %{QUERY_STRING} !(&dp=all.html)$ # 条件定義2 RewriteCond %{QUERY_STRING} &num=1234& # 条件定義3 RewriteCond %{QUERY_STRING} ^(.*&dp)=(.+)$ # プロトコル + ホスト名 + リクエストURI + 定義した条件グループの1つ目 + 固定値 RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}?%1=all.html [R=302,L] ```