Codeworks Notes

 2018-07-24

 2021-03-22

Webのメモ
htaccess

リダイレクトの設定

サイト転送もろもろについて。

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を設定しておくと、その時間までは検索エンジンのロボットがキャッシュを行わず、時間を過ぎてから再キャッシュしてくれます。