フレームワークとか使う時に「一緒に設置してね♪」とかなっているパターンの多い.htaccessファイル。
mod_rewrite周りなんかは書き方が覚えられなかったりする事も多く、その場合は都度調べるとかでも良いのですが、そういえばそれ以外にもちょこちょこと使う割には毎回調べて記述するといった不毛な時間を過ごすことが多いという事実に気づき、だったらある程度書き方をまとめておこう、と、そう思った次第です。
よく使う設定というのは人によっても違うと思いますが、まあそれなりに共通する方もいらっしゃるのではないかと思いますので、つらつらと書き留めておこうと思います。
それにしても最近野菜が高いですね。
PHPのWarningとErrorを表示する
開発中は表示させたい!
そんな夜もありませんか?
php_flag display_errors On php_value error_reporting 6135
逆にPHPの警告やエラー関連の表示を切りたい
逆にリリース時は逆に切っておきたいですね。逆に。
php_flag display_errors Off
CGIを有効にしたい
デフォルトでCGI動かない場合に。
また、cgi-bin以下でしか動かないサーバでもこの記述でどこでも動くようになるかもしれません。
Options FollowSymLinks ExecCGI AddType application/x-httpd-cgi .cgi
ファイル名省略のアクセス時、index.htmlより先にindex.phpとかindex.cgiが呼び出されて欲しい
極端な例ですが、サイトリニューアル時にトップページがindex.php等のプログラムに動作させることになったので、index.htmlには”/”(ルート)にリダイレクトさせるようなコードを書いておいた際に、DirectoryIndexの設定をきちんとしていないと無限ループに・・・・・
DirectoryIndex index.php index.cgi index.html index.htm
SSIが動くサーバで、拡張子htmlでもSSIが動作させられるようにしたい
なんか昔にメモしていたが、もしかすると1回も使ったことないかも・・・
AddType text/x-server-parsed-html .shtml .html
お問い合わせフォーム等、特定ディレクトリだけSSLにリダイレクトしたい。それ以外は非SSLで接続させたい
HTMLファイル側のグローバルメニューをhttpとかhttpsから始まるフルパスで書くのは、テスト環境などの事も考慮するとメンテナンス性が落ちるので避けたい所。
そんな時はmod_rewriteで解決。
RewriteEngine On # contactはSSL RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^contact/(.*)?$ https://%{HTTP_HOST}/contact/$1 [L,R] # contact以外は非SSL RewriteCond %{SERVER_PORT} ^443$ RewriteCond %{REQUEST_URI} !contact/ [NC] RewriteRule ^(.*)?$ http://%{HTTP_HOST}/$1 [L,R]
URL上は静的なhtmlと見せかけて、実は裏ではプログラムを動作させたい
まあその、これもmod_rewriteのサンプルです。
/products/1.html とかにアクセスしたら、商品マスターからid=1のデータを引っ張ってきて表示する的なやつですね。
値を2つ取りたい場合は、$1,$2 となります。
RewriteEngine On RewriteRule ^products/([0-9]+)\.html$ products/index.php?id=$1 [L] RewriteRule ^place/([0-9]+)/([0-9]+)/$ place/index.php?id=$1&area=$2 [L]
引っ越しました!で、リダイレクト
なんというかその、引っ越しました!で、リダイレクトです。タイトルまんまですね。
ちゃんと引っ越した事を分かる様にリダイレクト設定しておかないと、検索エンジンが引っ越しを正確に認識出来なかったりします。
# hoge以下は独立したサイトになりました!とかの例 Redirect permanent /hoge/ http://hoge.example.com/ # 全体のお引っ越しの場合 Redirect permanent / http://www.example.com/
IPアドレスで制限をかけたい場合
# 192.168.0. 以下のみ許可 order deny,allow deny from all allow from 192.168.0. # .hoge.ne.jpからと111.111.111.111からのアクセスを拒否 order allow,deny allow from all deny from .hoge.ne.jp deny 111.111.111.111
ファイル名省略アクセス(ディレクトリ名でアクセス)された場合にディレクトリの内容を見せないようにする
たまーにデフォルトでファイルが見えちゃうサーバが。
用途にもよりますが基本的には見せないようにしましょう。
Options -Indexes
特定の拡張子についてはアクセスを許可しない場合
ちょっとした設定ファイルを置かなければいけない時など、大体URLがばれることはあまり無いでしょうが念の為設定したい所。
# 以下の拡張子はアクセスを許可しない <Files ~ "^\.(htaccess|htpasswd|dat|csv|txt|inc)$"> deny from all </Files>
BASIC認証をかけたい
htpasswdファイル作成方法は、WEB上でもツールがあったりしますのでそちらが便利。
linux上とかでコマンドで生成したい場合は、
新規:htpasswd -c /var/www/htdocs/.htpasswd [ユーザー名]
追加・更新:htpasswd /var/www/htdocs/.htpasswd [ユーザー名]
(いずれもこの後にパスワードを2回入力)
とかすると生成出来ます。
-cオプションは、既にパスワードファイルがあっても上書きしてしまうので注意。
.htaccessの中身はこんな感じです。
# .htpasswdファイルが/var/www/htdocs/.htpasswdに配置されている場合 AuthUserFile /var/www/htdocs/.htpasswd AuthGroupFile /dev/null AuthName "Authentication area" AuthType Basic require valid-user
コメント