htaccess べし・べからず集


f:id:tenman:20090811142324p:image

The Definitive Guide to htaccess Techniques: Do's and Don'ts - Noupeで、htaccessについてのエントリがありました。
どれもよく使う基本的なものがまとまっていたので、Memoしておきます。
日本文は、翻訳ではありません。たぶんこういうことを書いているんだろうというメモです。



1.カスタムエラーページの作成


アパッチサーバは、カスタムエラーページを簡単に作成します。
エラーページファイルを作成して、htaccessファイルに以下のコードを追加します。

ErrorDocument 401 /401.php  
ErrorDocument 403 /403.php  
ErrorDocument 404 /404.php  
ErrorDocument 500 /500.php
 

/500.phpのところは、自分のサイトのエラーページへのパスに変更してくださいね。


2. ディレクトリブラウジングを防ぐ


ディレクトリの中にインデックスファイルを置かなければ、閲覧者はディレクトリを閲覧することが出来ます。
しかし、それを防ぐには、htaccessファイルに一行追加するだけです。

Options All -Indexes

3.ディレクトリのデフォルトインデックスページ

それぞれのディレクトリのインデックスページを使いたくなかったら, ディレクトリへの訪問者が、デフォルトページに到達できるように、デフォルトページを、以下のようにして、セットすることが出来ます。

DirectoryIndex news.html


4. 301 redirectを設定する。


あなたのウェブサイトの構成が変化して、それらの新しい位置にいくつかの古いURLを向け直す必要があると、ちょっとした記述で、それを行います。

 Redirect 301 /original/filename.html http://domain.com/updated/filename.html

5. GZIPに圧縮して出力

htaccessに以下を記述することで、javascrip,css,html,image等GZIPデータ転送が出来ます。

<IfModule mod_gzip.c>
	mod_gzip_on			Yes
	mod_gzip_dechunk	Yes
	mod_gzip_item_include file			\.(html?|txt|css|js|php|pl)$
	mod_gzip_item_include handler		^cgi-script$
	mod_gzip_item_include mime		^text\.*
	mod_gzip_item_include mime		^application/x-javascript.*
	mod_gzip_item_exclude mime		^image\.*
	mod_gzip_item_exclude rspheader	^Content-Encoding:.*gzip.*
</IfModule>


6. Redirect to a secure https connection


サイト全体を、https接続に変更したければ、コピペしてください

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}


7. スクリプトを規制する.

言語を指定して、スクリプトを停止することが出来ます。

Options -ExecCGI
AddHandler cgi-script .pl .py .php .jsp. htm .shtml .sh .asp .cgi

規制したいスクリプトのタイプに置き換えてください


8. ダイアログ付で強制ダウンロード

このコードを使うことで、閲覧者のブラウザで開く代わりに強制的にダウンロードさせることが出来ます。

AddType application/octet-stream .doc .mov .avi .pdf .xls .mp4

9. Restrict file upload limits for PHP.


PHPでのアップロードファイルサイズ上限を、実行時間とともに、制限するにはこれだ。

php_value upload_max_filesize 10M
php_value post_max_size 10M
php_value max_execution_time 200
php_value max_input_time 200

一行目 アップロードファイルサイズの制限
二行目 ポストデータの上限
三行目 実行時間の制限
四行目 入力を パースする最大の時間


10. Enable File Caching.


ファイルのキャッシングは、サイトのパフォーマンスとスピードを劇的に改善する。
以下のコードで、キャッシュの設定をフォローします。(伽主ファイルと、時間は、それぞれのサイトの必要性で決定してください。)
view plaincopy to clipboardprint?

#cache html and htm files for one day
<FilesMatch ".(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>

#cache css, javascript and text files for one week
<FilesMatch ".(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>

#cache flash and images for one month
<FilesMatch ".(flv|swf|ico|gif|jpg|jpeg|png)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

#disable cache for script files
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>

(Time shown for max-age is in seconds.)

11. hotlinking(直リン)から守る


hotlinkingは、あなたのコンテンツのサーバに保存した利用可能な画像を彼らの投稿に利用するよう、横取りしてしまうものです。あなたの帯域幅を取って、すばやく立派にになることができます
ここにhotlinkingを妨げる方法があります。

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9]  \.)?domain\.com [NC]
RewriteRule \.(gif|jpe?g|png)$ - [F,NC,L]

(Of course you’ll want to replace the domain\.com with your own domain name.)

関連エントリ

アクセス禁止 - ミショニポー

12. Disguise your file types.

すべてのファイルタイプをPHPとしてパースして、偽装します。

ForceType application/x-httpd-php


すべてのファイルタイプをPHPとしてパーすするような事は、避けた方法いいでしょう。
現実に使うとすれば、ファイルの種類などに限度を与えたほうがいいと思います。

<FilesMatch "html$">
ForceType application/x-httpd-php
</FilesMatch>


一般的な 教訓

  • Be careful of spelling
  • htaccess is case sensitive.
    • 大文字小文字に注意して
  • Consider your caching
    • 設定には、注意深さが必要です。もし、あなたのサイトが概ね静的なら、眺めのキャッシュタイム
    • 毎日更新するようなら、それに見合うキャッシュタイムを必ず適合させてください。そういう事で、アップデートしたと思って再訪したが、それを見れないというさらに悪いことではなくなる。
  • Don’t forget to comment out your notes within the file.
    • 行頭に、#を書いてからコメントを書いてください。
  • Always test your site
    • htaccessへのどんな変更もテストしてください。ひとつのミスタイプされた文字があなたが気づくまでの何時間も違う動きをしているかもしれません。
  • Backup your htaccess
    • どんな変更も行う前に、必ずhtaccessファイルのこれについては、そして、いつもバックアップをとってください。 そのように、問題があれば、容易にスワップできます
  • cross-browser compatible
    • ブラウザ互換性を確実にしてください。いくつかのブラウザは、サポートしないものがあります。
    • (たとえば、forcing file downloads 関数です。)
  • htaccessでウェブディレクトリを保護を保護するときには、httpsアクセスに制限されない場合、パスワードはスニフィングされるかもしれません。(安全でない接続にあなたの認証をするように)事を覚えておいてください。

More Resources: