正しい .htaccessリダイレクト 2020年版

たまにしか使わないのでよく忘れてしますhtaccessのリダイレクトを個人的にメモしておきます。なお、記述は一例なので、他の書き方ももちろんあります。

※省略していますが、外側は、<IfModule mod_rewrite.c>~~~<IfModule>で囲む必要があります。

 

特定のファイルの301リダイレクト

 

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule XXXXX.html 絶対パス [R=301,L]
</IfModule>

旧ページ(XXXXX.html)から変更先のページ(絶対パス)に301リダイレクト

htmlファイルの名前やディレクトリを変更した場合や、ファイルの拡張子をhtmlからphpに変更した場合などに役に立ちます。

※RewriteBaseの記述がないとエラーになることがあるので、注意。

 

ドメインをwww無しに統一

記述例 1

<ifmodule mod_rewrite.c>

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.XXXXX\.co\.jp
RewriteRule ^(.*)$ http://XXXXX.co.jp/$1 [R=301,L]

</ifmodule>

記述例 2

<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,L]
</ifmodule>

記述の意味は、URLにwwwが付いている場合に、www無しのドメインに書き換える(301リダイレクト)ということになります。

※「^」は、正規表現で文字の先頭を意味します。つまり、wwwで始まるホスト名の場合というリダイレクト条件になります。

※「\」バックスラッシュは、実際は半角の「¥」で、エスケープシーケンス(エスケープ文字)で使っています。

※「[NC]」は、大文字と小文字を区別しないという意味になります。

 

 

httpからhttpsへのリダイレクト

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://XXXXX.jp/$1 [R=301,L]

記述の意味ですが、httpsになっていないURLの場合にhttpsに書き換えるという意味になります。

一般的な記述は上記でOKなのですが(lolipop/XSERVERで確認)、

2018.8 GMO CLOUDのiCLUTA+サーバーでは上記記述ではエラーとなりました。
調べてみると、公式のヘルプ「iCLUSTAシリーズの.htaccess仕様に関して」の箇所に、

利用可能ディレクティブに関して

以下の記述はiCLUSTAサーバーにて非対応となっております。
下記の記載があった場合にはリダイレクトが有効になりませんのでご注意ください。

RewriteCond %{HTTPS} off

 

なんですと!( ゚Д゚;)

しかし、同じページにhttpsへのリダイレクト記述方法が書いてありました。

RewriteEngine on
RewriteCond %{ENV:HTTPS} !^on$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 

ということで上記のコピペでhttpsへの転送(リダイレクト)を確認できました(2018年8月2日)。

【ソース】GMOクラウドHELP
https://help.gmocloud.com/app/answers/detail/a_id/1417/related/1

 

更新履歴

・2018年8月2日作成

・2020年3月6日追記

コメント