レンタルサーバーの.htaccessでhttps化とwww無しとindex.php/htmlの非表示の設定を行う

レンタルサーバーを利用している場合、.htaccessで自分のサイトのURLの正規化を行いたい場合があるかと思います。今回はこのサイトの.htaccessを参考にどのように記載すべきか見ていきたいと思います。

早速ですがこのサイトの.htaccessを記載します。

# 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

<IfModule mod_rewrite.c>
# https化処理
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# www無しのURLに統一
RewriteCond %{HTTP_HOST} ^www\.tweetyard\.net
RewriteRule ^(.*) https://tweetyard.net/$1 [R=301,L]

# index.phpなし
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://tweetyard.net/$1 [R=301,L]
</IfModule>

解説ですがこのサイトではWordPressを使用しているため最初にその情報が記載されています。その他の設定を下に書いています。取り敢えず一般化して個別の状況でどのように書けばよいか記入例を書いていきます。

①https化処理及びwww無し及びindex.phpやindex.htmlを表示しない

先ずはこのサイトでの設定とほぼ同じ設定をする場合です。ドメイン名は○○○.netとしています。

<IfModule mod_rewrite.c>
#URLの書き換えを可能にする
RewriteEngine on

# https化処理
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# www無しのURLに統一
RewriteCond %{HTTP_HOST} ^www\.○○○\.net
RewriteRule ^(.*) https://○○○.net/$1 [R=301,L]

# index.php/htmlなし
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://○○○.net/$1 [R=301,L]
</IfModule>

② https化処理及びwww有り及びindex.phpやindex.htmlを表示しない

httpsで通信し、wwwを表示する場合です。

<IfModule mod_rewrite.c>
#URLの書き換えを可能にする
RewriteEngine on

# https化処理
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# www有りのURLに統一
RewriteCond %{HTTP_HOST} ^○○○\.net
RewriteRule ^(.*) http://www.○○○.net/$1 [R=301,L]

# index.php/htmlなし
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://○○○.net/$1 [R=301,L]
</IfModule>

③httpでwww有り及びindex.phpやindex.htmlを表示しない

http(非SSL)で通信し、wwwを表示する場合です。

<IfModule mod_rewrite.c>
#URLの書き換えを可能にする
RewriteEngine on

# httpへリダイレクト
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# www有りのURLに統一
RewriteCond %{HTTP_HOST} ^○○○\.net
RewriteRule ^(.*) http://www.○○○.net/$1 [R=301,L]

# index.php/htmlなし
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://○○○.net/$1 [R=301,L]
</IfModule>

正規表現というのは見慣れないものなので最初は戸惑うかもしれません。取り敢えず①か②で記述すればいいと思いますが、諸事情がありhttps(SSL)にできない場合には③にすればいいと思います。「index.php」や「index.html」というのはこれ自体が一つのキーワードとなっておりトップページなどに置くと自動で表示されるものです。

wwwの有無についてですが、このサイトでは表示しないほうにリダイレクトしていますが、youtubeやamazon、yahooではwwwを表示しています。これは電子メールやファイル転送などのインターネットプロトコルでは別の仕組みを利用しているという事から明示する意味合いがあるのだと思いますが、このサイトではアドレスが長くなるのが嫌だったので省略形を採用しています。もちろんどちらかに統一することは検索エンジン対策(SEO)という意味合いもあります。

index.html/phpについては非表示でよいのではないかと思います。というのも拡張子(.htmlとか.phpの部分)は変更する可能性があるからです。このサイトはWordPressを使用していますのでトップページはindex.phpとなっていますが使用言語が変われば拡張子も必然的に変化します。そのため昔のHTMLで記述されたサイト以外では非表示となっている場合が多いのではないかと思います。

参考リンク

https://murashun.jp/blog/20190215-01.html

https://userweb.mnet.ne.jp/nakama/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA