質問: teratailでの質問が不慣れで申し訳ございません。 質問内容でわかりにくい箇所がございましたら都度、修正させていただきますのでご指摘いただければと思います。 色々、自分で試したのですが知識不足で見当違いなことをしている気がします。 長文になりますが、起こっている現象や環境等を下記で説明しております。ご教授いただけますと幸いです。 ### 環境 HPの移転に伴い、リダイレクト処理を行いました。 HPは移転前と移転後ともに ・エックスサーバー利用 ・WordPress使用 リダイレクト処理方法は、エックスサーバーのサーバーパネルから転送設定を行いました。 ### したいこと ・リダイレクトの際に、エラーページが表示されないようにしたい ・サイトに訪問するユーザーのキャッシュを強制的に消したい ### 起こっている問題 通常のリダイレクト処理はうまくいっているようですが、Googleからオーガニック検索をした際に、うまくいっていないことを確認しました。 検索結果に表示される移転前HPのURLをクリックするとURLが/(スラッシュ)のない状態でアクセスされ、下記のようなエラーページが表示されます。 ドメイン名を伏せさせていただく都合上、 移転前URLをhttps://before.com 移転後URLをhttps://after.com Google検索での検索結果(拾われたページ)を「https://before.com/サンプルページ」 とさせていただきます。 (拾われたのは日本語URLのページだったため、例も日本語の「サンプルページ」とさせていただきます) 実際にアクセスすると、/(スラッシュ)が抜けた状態にURLが書き換わり、それが原因で下記のようなページが表示されます。 ``` このサイトにアクセスできません。 https://after.comサンプルページ のサーバーの IP アドレスが見つかりませんでした。 ``` ### 気になったこと、気づいたこと ・「https://after.comサンプルページ」このURLをコピペして、別のところに貼り付けると https://after--com-k8wuv9s3t9apw354/ このように.(ドット)が--(ハイフン)に書き換わったURLになっておりました。 一般的に日本語URLは、「%」で囲まれたものに書き換わると思われるのですが、、、。 それから表題のトラブルは、移転先では存在しないページに限って起きているのではと感じました。 移転前には https://before.com/サンプルページ が存在しますが、移転後のサイトでは https://after.com/サンプルページ は存在しません。 ### 試したこと スラッシュがないことが原因かと思い、下記を試しましたが見当違いでした。 ・.htaccessのリダイレクト先のURLの末尾に/(スラッシュ)を追加 →変化なしでした。 .htaccessコードは下記の通りです。 エックスサーバーの転送設定で自動で生成されたものです。 最後の行のURLに自分で/(スラッシュ)を追記しました。 ``` SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress Redirect permanent / https://after.com/ ``` ・function.phpを編集して末尾に/(スラッシュ)を追加 →こちらの記事を参考にしました。 https://blog.webico.work/htaccess02 専門知識がない状態でこの辺りを触るのは、これ以上は危険かと思い、こちらで質問させていただきました。 何卒、よろしくお願い申し上げます。 ### 現状 根本的な解決ではないのですが、とりあえず以下の1〜3の対応をしたところ、エラーページについては解消されました。 ただ別の問題が発生しました、、、。 1 移転元から移転先へのリダイレクト設定を解除 2 WordPressのメンテナンス用のプラグイン「WP Maintenance Mode」を使用して、リダイレクト 3 どのページにアクセスしても、きちんと移転先のTOPページへリダイレクトされて、「このサイトにアクセスできません。」のエラーページは表示されなくなり解決? しかし、この状況はシークレットモードなどのブラウザ履歴(キャッシュ?)が残っていない状態のときだけに限ります。 一度でもエラーページにアクセスしたことがあるユーザーは、キャッシュの力で再びエラーページが表示されてしまう状態なのかと。 逆にいうと、アクセスするユーザーのキャッシュを強制的にクリアにするような方法があれば、解決するかもと素人ながら考えました。 調べたところ、やはり.htaccessの編集が必要のようで、下記コードを移転元サイト(https://before.com)に貼り付けたのですが、何も起こらずでした;; ``` SetEnvIf Request_URI ".*" Ngx_Cache_NoCacheMode=off SetEnvIf Request_URI ".*" Ngx_Cache_StaticMode # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] Header set Pragma no-cache Header set Cache-Control no-cache # END WordPress ```
回答: いまいち再現ができないのですが、移転で、URL がかわるのはドメイン名だけということで良いのですよね? そして、Google 検索で出る旧URL は、正しいURL ということですね。 移転元のドメインの .htaccess の RewriteEngine On `の次の行に ``` RewriteRule ^(.*) http://new.example.com/$1 [R=301,L] ``` のように記載するとどうなりますか?