常時SSL前提で書いてます。常時SSLじゃない場合は RewriteRule
などの https://
の部分を http://
に変えてください。
httpsに統一
全てのページへのアクセスをhttpsに統一します。
例:http://your-domain.com
へのアクセスを https://your-domain.com
へリダイレクトします。
そのままコピペするだけで使えます。
# httpsに統一
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
wwwなしに統一
例:https://www.your-domain.com
へのアクセスを https://your-domain.com
へリダイレクトします。
http://www.your-domain.com
へのアクセスを https://your-domain.com
へリダイレクトします。
そのままコピペするだけで使えます。
# wwwなし に統一
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
wwwありに統一
例:https://your-domain.com
へのアクセスを https://www.your-domain.com
へリダイレクトします。
http://your-domain.com
へのアクセスを https://www.your-domain.com
へリダイレクトします。
そのままコピペするだけで使えます。
# wwwあり に統一
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*) $https://www.%{HTTP_HOST}/$1 [R=301,L]
index.php または index.html なしに統一
例:https://your-domain.com/index.html
へのアクセスを https://your-domain.com/
へリダイレクトします。
https://your-domain.com/directory/index.php
へのアクセスを https://your-domain.com/directory/
へリダイレクトします。
そのままコピペするだけで使えます。
# index.php(.html)なしに統一
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
末尾のスラッシュをなしに統一
例:https://your-domain.com/page-name/
へのアクセスを https://your-domain.com/page-name
へリダイレクトします。
# 末尾のスラッシュをなしに統一
RewriteRule ^(.*)/+$ $1 [R=301,L]
末尾のスラッシュをありに統一
例:https://your-domain.com/page-name
へのアクセスを https://your-domain.com/page-name/
へリダイレクトします。
WordPressの場合は書かなくても自動補完され流のと、書くと逆にリダイレクトループが発生するのでこれは書かないようにしましょう。
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.[^/\.]+$
RewriteRule ^(.*)$ $1/ [R=301,L]
ディレクトリ単位でリダイレクト
ディレクトリ名を変更した場合など。
以下の例は https://your-domain.com/old-dir/page-name/
をhttps://your-domain.com/new-dir/page-name/
へリダイレクトするサンプルです。
old-dir
と new-dir
を環境に合わせて変更してください。
# ディレクトリ単位でリダイレクト
RewriteRule ^old-dir(.*)$ /new-dir$1 [R=301,L]
ページ単位でリダイレクト
ある1ページだけをリダイレクトする場合。
以下の例は https://your-domain.com/blog/769/
をhttps://your-domain.com/new-dir/new-page/
へリダイレクトするサンプルです。
リダイレクト元はドメイン以降のみ、リダイレクト先はフルURLで記述します。
# ページ単位でリダイレクト
Redirect 301 /blog/769/ https://your-domain.com/new-dir/new-page/
.htaccess 表記例
WordPressを想定した記述例です。
WordPressの場合はこんな感じで WordPressさんが書いた記述より上に書きます。下に書くと意図した動作にならなかったりします。
また、WP Fastest CacheなどのサードパーティーWordPressプラグインが .htaccess
に記述することもあるので、自分が書いた部分を明確にするため # BEGIN 自分
, # END 自分
などのコメントで囲んでおくとよいと思います。
# BEGIN 自分
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
# httpsに統一
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# wwwなし に統一
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# index.php(.html)なしに統一
RewriteCond %{THE_REQUEST} ^.*/index.(html|php)
RewriteRule ^(.*)index.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
# 末尾のスラッシュをなしに統一
RewriteRule ^(.*)/+$ $1 [R=301,L]
# ディレクトリ単位でリダイレクト
RewriteRule ^blog(.*)$ /$1 [R=301,L]
# ページ単位でリダイレクト
Redirect 301 /blog/769 https://your-domain.com/1286
</IfModule>
# END 自分
# BEGIN WordPress
# `BEGIN WordPress` から `END WordPress` までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress