.htaccessの設定まとめ

2017.6.25

.htaccessとは何か

apacheの設定ファイルの一部。

ディレクトリごとに設定を行いたいときに、htaccessファイルを使用すると実現できる。

ただし、htaccessが使えるかどうかは、レンタルサーバによって、違いがあるので、要確認。

※htaccessという名前も、Apacheの設定で変更できる。デフォルトで、htaccessとなっている模様。

301リダイレクト

RewriteEngine on 
RewriteBase / 
RewriteRule example.html "http://www.example.jp/.html" [R=301,L]

302リダイレクト

301リダイレクトと302リダイレクトの使い分け

301⇒恒久的なリダイレクトの時。

302⇒暫定的なリダイレクトの時。

404リダイレクト

存在しないURLにアクセスされたとき、404ページにリダイレクト。

事前に404エラーが発生した時に表示したいページを作成しておき、htaccessでステータス404のとき、指定のURLにリダイレクトする。

ErrorDocument 404 /404.html

この例では、404エラーが発生した時に、404.htmlページへリダイレクトされることになる。

mod_rewriteを有効にしてURLの書き換えが出来るようにする

htaccessでmod_rewriteを有効にするため、.htaccessファイルの先頭に下記のコードを書いておく。

RewriteEngine On

これを書いておくことで、rewriteコマンドを使用することができる。

リンク切れ画像を別の画像に差し替えて表示する

サイトに張った画像へのリンクがいつの間にか切れている。

とか、後から特定のファイル名で画像を置くけど、今は画像が無いとか。

そういった場合、画像が存在しないため、画像がうまく表示される、画面のデザインが崩れてしまう。

この方法を使えば、画像が無いときにあらかじめ用意した「noimage.jpg」を代わりに表示して、デザインの崩れを防ぐことができる。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} (.*)/img/(.*)\.jpg
RewriteRule ^.*$ /noimage.jpg [L]

各行を説明していく。

RewriteCond %{REQUEST_FILENAME} !-f

ファイルが存在しなかったとき。を表現している。

RewriteCond %{REQUEST_FILENAME} (.*)/img/(.*)\.jpg

このパターンにマッチする画像がなかったときに、後述の代替画像を表示する。

RewriteRule ^.*$ /noimage.jpg [L]

ファイルが存在しなかったとき、代わりに表示する画像を記述。

mod_rewriteを使って画像ファイルへの直リンクを禁止する

サイトに限らず、画像やPDFなどのファイルは勝手にリンクを貼られることがある。

htaccessの設定を行うことで簡単に防止することができる。

RewriteBase /img/
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?note\.mokuzine\.net [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{REQUEST_URI} !^dummy\.jpg$
RewriteRule \.(jpe?g|png|gif)$ dummy.jpg [NC,R,L]

各行を説明していく。

RewriteBase /img/

URLの書き換えを行うアクセス対象のディレクトリ。

このディレクトリ下に置いているファイルにアクセスしたときに、設定が実行される。

RewriteCond %{HTTP_REFERER} !^$

リファラーが無いときに許可する。

RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?note\.mokuzine\.net [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_REFERER} !msn\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]

アクセスを許可する、参照先を記載。

ここに書いているサイトからのアクセスじゃなければ、代わりの画像表示が行われる。

RewriteCond %{REQUEST_URI} !^dummy\.jpg$

ダミー画像へのアクセスは許可する。

RewriteRule \.(jpe?g|png|gif)$ dummy.jpg [NC,R,L]

パターンに一致するファイルにアクセスされたら、代わりにdummy画像を表示する。

mod_rewriteを使わずに、画像ファイルへの直リンクを禁止する

<FilesMatch "\.(gif|jpg|jpeg)$">
SetEnvIf Referer "^http://mokuzine\.net/" ref_ok
SetEnvIf Referer "^http://www\.mokuzine\.net/" ref_ok
SetEnvIf Referer "^$" ref_ok
Order deny,allow
Deny from all
Allow from env=ref_ok
</FilesMatch>

各行を説明していく。

<FilesMatch "\.(gif|jpg|jpeg)$">

拡張子が、gif、jpg、jpegのファイルのとき設定された内容を実行する。

SetEnvIf Referer "^http://mokuzine\.net/" ref_ok
SetEnvIf Referer "^http://www\.mokuzine\.net/" ref_ok

記載したURLのときに、リンクを許可する。

SetEnvIf Referer "^$" ref_ok

セキュリティーソフトなどによって、リファラーが消されている場合は、許可する。

自分のサイトにアクセスしてきた人でも、セキュリティーソフトによっては、リファラーが消される場合があるので。

Order deny,allow
Deny from all
Allow from env=ref_ok

いったんすべてのアクセスを拒否した後に、指定したらURLからのアクセスは許可する。

記載された設定は、上から順番に処理されるので、この様に有効にする設定を最後に書いている。

</FilesMatch>

設定の終了