.htaccessでURLを正規化。コピペ一発書き換えなしの簡単設置バージョン公開!

投稿日:

どうも、カッパです。

「面倒くさがり」は、エンジニアでいようとするときに重要な資質の一つであると考えます。

面倒くささを解消するためならどんな苦労も買って出る!

これくらいの心意気が必要なのかもしれません。

そのためのコードがこちら

wwwなしで統一する場合


RewriteEngine on

# wwwなしで統一
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# httpsを強制
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# インデックスファイルを表示しない
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
# URL正規化コードここまで

以前紹介したコードとの違いは「example.com」と書いてある部分がすべて変数になっているというところ。

そのためこのコードをコピペして、サーバーに.htaccessをアップすればそれでおしまい。

もうexample.comを自分のドメインに合わせて書き換える必要もありません。なんて素敵!

wwwありで統一する場合


RewriteEngine on

# wwwありで統一
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# httpsを強制
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# インデックスファイルを表示しない
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
# URL正規化コードここまで

wwwありで統一する場合はこちらのコードをコピペし、.htaccessをサーバーにアップロードしてください。

ところで一つ補足があります。

WordPressを使っている場合はインデックスファイルの非表示設定はいらない。でも、あっても問題はない

サイトをWordPressで構築し、パーマリンクの設定を行った場合、.htaccessファイルが自動生成されます。

.htaccessには以下のようになっています。


# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

WordPressをインストールした場所により若干記述が異なります。

今回詳しい説明は省きますが、こちらでより高度なURLの書き換え設定が行われています。

この状態だと

ココがポイント

あえてindex.htmlを見せ、静的なページを別に作る

ということも可能になります。

ちなみにindex.phpでアクセスした場合には「/」にリダイレクトされるので、コンテンツの重複は起こりません。

「面倒くさい」から解放されよう

今回のコードで、これからいくつもサイトを作成する人や、まだ複数サイトのURL正規化を行っていない人は、かなり面倒から解放されると思います。

こうやってとても小さな工夫を日々積み重ねて行くのもなかなか楽くスキルアップにも繋がります。コツコツやっていきましょう。

参考

  • B!