リダイレクトの設定
サイト転送もろもろについて。
http から https へ301リダイレクトする
表示させたいコンテンツが http でも https でも表示できるとき、https でのみアクセスさせたい場合は、301リダイレクトを設定することで Port80 へリクエストがあったときに Port443 へ自動転送させることができます。
301リダイレクトの設定
.htaccess に記述します。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
もしくは
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
と書く。
単一ページのリダイレクト設定
サイトリニューアル時にフォルダ構造やファイル名が再整理された場合、301リダイレクトしておくと「このページは恒久的に移転された」ことになり、検索エンジンのページ評価が引き継がれます。
RewriteRule ^hoge.php$ https://example.com/hoge/ [L,R=301]
RewriteRule ^foo/bar.php$ https://example.com/bar/ [L,R=301]
自前404ページにリダイレクトさせる
存在しないページへアクセスした時にエラーページとして任意のものを表示させる方法です。
SEO 的にもお行儀がいい。
404リダイレクトの設定
.htaccessに記述します。
ErrorDocument 404 /404.html
書いたら .htaccess と 404.html をサーバールートに置く。
html は別に php でもよい。読めりゃいい。
www なしアクセスを www ありに転送する
どちらにもアクセスできる場合、一方に寄せておくのが SEO 的にお行儀がいい。
でない「と同一のコンテンツを持つ URL が2つある」状態になり、検索ページランクが下がります。
www つきサイトへの転送設定
.htaccessに記述します。
RewriteCond %{HTTP_HOST} ^my-domain\.com
RewriteRule (.*) https://www.my-domain.com/$1 [R=301,L]
または
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
特定のサブドメインへ転送させるときにも使えます。
^ は文字の始まりを意味し、
.* は任意の文字の連続、つまり全ての文字列にマッチします。
リクエストされたパスをリダイレクト先でも使いたいので
( .* ) とカッコで括り、後方参照の $1 とすることで
異なるドメインの同じパスにリダイレクトできます。
メンテナンス時に行う503リダイレクト
サイト内のどのページにアクセスしても「ただいまメンテナンス中です」というページに遷移するようにしたいとき、200のステータスコードを返すと検索エンジンがメンテナンスページをキャッシュしようとするので、503が返るようにしましょう。
.htaccessに記述します。
ErrorDocument 503 /maintenance.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=***.***.***.*** (自IPアドレス)
RewriteRule ^.*$ - [R=503,L]
</IfModule>
RewriteCond %{REMOTE_ADDR} != の部分に自IPアドレスを入れておくと、外から見たときにメンテナンスページが表示され、自宅から見たときはウェブサイトが表示されます。
さらにこの下に。
# <IfModule mod_headers.c>
# Header set Retry-After "Fri, 19 Mar 2021 9:00:00 GMT"
# </IfModule>
Retry-Afterを設定しておくと、その時間までは検索エンジンのロボットがキャッシュを行わず、時間を過ぎてから再キャッシュしてくれます。