.htaccessで閲覧を便利にする設定

2015年12月10日
とっつぁん
SEO ユーザビリティ
この記事は 5 分くらいで読めると思います
迷宮の階段

.htaccessって?

迷宮の階段

ホームページ作らない人にはあんまり関係のないお話。

最近色々とはまったこともあるので.htaccessについて書いておきます。

.htaccess(ドットエイチティーアクセス)とは、Apacheを用いたWebサーバにおいて、ディレクトリ単位で設置及び設定を行える設定ファイルである。

Wikipedia

まぁウィキペディアにはもっと詳しく書いてますけど、ざっくり言うと

「閲覧時の設定ルールを指定するファイル」です。

例えば「このページにアクセスされたらこっちのページに移動させる」とか

存在しないURLを入力されたら自作のNotfoundページを表示するとかそういう事ができます。

で、今回はホームページ作ったら設定しておけば便利、な.htaccessの記述を紹介します。

www付きのURLの場合もwwwなしのURLを表示

独自ドメイン取ってホームページをさぁ開設、

あんまり気にしなかったけどwwwついたURLとwwwついてないURLが存在する?

結構気づいてない人もいるんですけど、wwwがあってもなくても同じページが表示されるホームページってあります。

統一した方が良い理由

①気分的に嫌

ワタクシはこれに尽きますね。

気分的に嫌、以外に理由は必要でしょうか…?

②wwwありなしどちらでもアクセスできる場合は、SEO的に統一した方が良いと言われています。

人間が見る分には同じサイトだけど、検索エンジンからは全く別のサイトで全く同じ重複コンテンツがあると認識されるというのです。

正直なところ、わざわざ自分で本当にSEO的に問題なの?というのを試したことが無い為真偽のほどは分かりませんが、

Googleのサーチコンソールにはどちらも別のサイトとして登録出来てしまうんですよね。

ただ、「WEBに詳しくない普通の人がホームページ作って.htaccessの設定なんかするかよ」という理由からワタクシは個人的には「たいして関係ないんじゃないの?」と思っています。

wwwありに統一

wwwありに統一する記述方法です。

※「vegl」「biz」の部分は変更下さい。

RewriteEngine on

RewriteCond %{HTTP_HOST} ^vegl\.biz
RewriteRule (.*) https://www.vegl.biz/$1 [R=301,L]

wwwなしに統一

wwwなしに統一する記述方法です。

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.vegl\.biz
RewriteRule (.*) https://vegl.biz/$1 [R=301,L]

上記を「.htaccess」という一見「拡張子だけ?」にも見えるファイル名で保存してアップロードするだけです。

この名前で保存できない場合は適当な名前でFTPにアップロードした後、名前を変更すればOKです。

index.phpやindex.htmlのファイル名を表示しない

index.phpやindex.htmlってURL入力する時、省略できますよね?

URLも長くなるのでこのファイル名は無い方が良いですね。

でも実際は色んなとこからリンク貼られたとして、リンク貼ってくれた人がファイル名無しで統一してくれるとは限らない…

そこで.htaccessを使ってindex.phpが付いてても全部省略したURLに飛ばしてしまおうという記述方法がこれ。

※「vegl」「biz」の部分は変更下さい。

RewriteEngine on

RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://vegl.biz/$1 [R=301,L]

サブドメインに注意

例えばvegl.bizの.htaccessにこの指定をし、サブドメインでneko.vegl.bizというページを作ったとします。

すると、サブドメインのURLにindex.phpを入れると、

本家サイトの.htaccessのこの指定により、ファイル名が省略されて、結果サブディレクトリ表示になってしまうという事。

回避策としては本家の.htaccessに「サブディレクトリでのアクセスをサブドメインに飛ばす指定」をしておけば大丈夫です。

というかこれもサブドメインとサブディレクトリの重複コンテンツなので作成したときにやっておくべきことですね。

※「neko」「vegl」「biz」の部分は変更下さい。

Redirect /neko/ "https://neko.vegl.biz/"

拡張子を忘れても表示する

たとえばhttps://vegl.biz/mokomoko.phpというファイルにアクセスするときに

https://vegl.biz/mokomokoと入力した場合、Notfoundになるのですが、こういう場合でも表示させてしまう指定です。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

拡張子が違う場合は.phpの部分を変更してください。

CMSではまったこと

.htaccessにこの記述を追加してから、PHPで制作したCMSにログイン出来ない事がありました。

特に管理画面ではこの指定は必要ないのでCMSのディレクトリのみ

RewriteEngine off

とすることで解決しました。

まとめ

全部コピペでやっちゃいたい人へ。

RewriteEngine on

# wwwがある場合、wwwなしに301リダイレクト
RewriteCond %{HTTP_HOST} ^www\.vegl\.biz
RewriteRule (.*) https://vegl.biz/$1 [R=301,L]

# index.phpの場合、拡張子なしに301リダイレクト
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://vegl.jp/$1 [R=301,L]

# 拡張子なしの場合でもアクセス
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

※URLは変更してください。

※最後に改行が無いと動かない場合があります。