.htaccessで閲覧を便利にする設定
.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は変更してください。
※最後に改行が無いと動かない場合があります。
POST COMMENTコメントを投稿する