RealPath:
WebPath:
2017/01/13 00:40 (JST) 更新
Apache >>

.htaccess

Contents

.htaccess の有効化

httpd.conf で AllowOverride All しておくと対象ディレクトリでの .htaccess が有効になる。

httpd.conf
<Directory ....>
    ....
    AllowOverride All
    ....
</Directory>

コメント

.htaccess
# コメント

文字コード関連

デフォルト文字コード設定

.htaccess
AddDefaultCharset utf-8

特定拡張子ファイルのデフォルト文字コードを指定

.htaccess
AddType "text/javascript; charset=utf-8" .js
AddType "text/html; charset=utf-8" .html .htm
AddType "text/plain; charset=Shift_JIS" .txt .dat

または

<Files "*.js">
    ForceType "text/javascript; charset=utf-8"
</Files>

ディレクトリリスティングの禁止

Options が使える環境ならこれが一番楽。

.htaccess
Options -Indexes

 
Options が使えない環境では以下のように疑似的に対応する。

.htaccess
DirectoryIndex index.php index.cgi index.htm index.html 403.html
<Files 403.html>
   deny from all
</Files>

アクセス制限

特定のホストのアクセスだけを許可する

.htaccess
# いくつかのドメインのみ、アクセス許可
order deny,allow
deny from all
allow from .hoge.jp        # *.hoge.jp からのアクセスを許可
allow from .fuga.jp        # *.fuga.jp からのアクセスを許可
allow from localhost       # localhost 許可
allow from 127.0.0.1       # IP 指定で許可
allow from 192.168.11.     # IP 範囲指定で許可

評価順

allow や deny が条件に一致しても、そこで判定を終了せず、ぜんぶ判定する。
つまり、最後の条件結果が優先されるっぽい。

全アクセス拒否

.htaccess
order deny,allow
deny from all

特定のファイルのみ拒否

.htaccess
order deny,allow

# .html ファイルの拒否 (正規表現によるファイル名指定)
<Files ~ "\.html$">
  deny from all
</Files>

# 403.html ファイルの拒否 (ファイル名直接指定)
<Files 403.html>
   deny from all
</Files>

# .sql ファイルの拒否 (ワイルドカードによるファイル名指定)
<Files *.sql>
   deny from all
</Files>

ページ移転時等の転送設定

.htaccess
RedirectMatch .* http://192.168.11.8/~tokyo/
RedirectMatch api\/.* http://192.168.11.8/~tokyo/
RedirectMatch wiki\/.* http://192.168.11.8/~tokyo/
.htaccess
RedirectMatch index_.* /inside/main.php
.htaccess
RedirectMatch /old/main-w.html /new/main.php?t=0\&aaa=1
RedirectMatch /old/main-y.html /new/main.php?t=0\&aaa=2

 
※永続移転

.htaccess
RedirectMatch permanent /old/index.html  http://abcdefg.jp/new/index.html
RedirectMatch permanent /old2/index.htm  http://abcdefg2.jp/new/index.htm

メンテナンス表示

.htaccess
ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !=/maintenance.html
  RewriteRule ^.*$ - [R=503,L]
</IfModule>

ディスパッチ

cakephp のケース

.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

mediawiki のケース

.htaccess
# for mediawiki short url
RewriteEngine on
RewriteRule ^mediawiki/index.php/(.*)$ /mediawiki/index.php?title=$1 [PT,L,QSA]

フラグ

  • [QSA] … 「Query String Append」の略。%{QUERY_STRING} を引数としてつけたいときに使う。
  • [L] … 「Last」の略。定義の最終行。この行以降の RewriteRule は無視される。
  • [PT] … 「Path Through」の略。Rewriteを打ち切って他の変換 (Script Alias等) に渡す。

参考