htaccess

.htaccessとは

.htaccessとはapacheのhttpd.confの設定の一部をディレクトリごとに設定できる設定です。おもにアクセス制御やパスワード制限、リダイレクトなどを設定することができます。

apacheのhttpd.confを編集する

vi /etc/httpd/conf/httpd.conf


<Directory />
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

AllowOverride を All に設定して、httpd.confの設定を上書き可能にする


<Directory />
    Options FollowSymLinks +Indexes
    AllowOverride All
    Order deny,allow
    Deny from none
</Directory>

※レンタルサーバの場合は質問ページ等で制約を確認してください。

.htaccessファイルをつくる

.htaccess記述例

Order Deny Allow

例:
Order Deny,Allow
Deny from all
Allow from all
すべての閲覧者を許可
Denyが拒否条件で、Allowが許可条件(Orderで後ろに書いたものが優先される)


ErrorDocument 404 http://tt,x0,to/404.html
404(ページが見つからないエラー)のとき、指定のアドレスへ飛ばす
これを利用してオリジナルのエラーページを公開できます

Options設定

※さくらのレンタルサーバではOption設定は使えないようです。


None  …すべてのオプションを無効にする。 
All …MultiViews 以外のオプション全てをを有効する。 

ExecCGI  …CGIスクリプトの実行を可能にする。 

FollowSymLinks  …シンボリックリンクを有効にする。 

Includes  …SSIの利用を可能にします。 
IncludesNOEXEC  …SSIの利用を制限付きで可能にします。#exec #include 命令が使えません。 

Indexes  … index.html がない場合、ディレクトリ一覧を表示することを許可する。 

MultiViews  …MさultiViews 検索を許可する。 

記述例
Options ExecCGI FollowSymLinks -Indexes

指定した拡張子でCGIの使用を許可

AddType application/x-httpd-cgi .cgi .pl


指定した拡張子でSSIの使用を許可


AddType text/x-server-parsed-html .shtml


/ (スラッシュ)で終わったURLのとき、優先して表示されるページの指定


DirectoryIndex top.htm index.htm index.cgi

デフォルトではindex.html

Alias設定

Aliasを使ってURLの書き換えができます

http://exsample.com/img/* 以下を内部パスでディレクトリ設定する例

Alias /img/ /var/www/img/

ファイル名が正規表現で指定した条件の場合、呼び出しを拒否する

<Files ~ "\.(jpg|jpeg)$>
Order Allow,Deny
Deny from all
</Files>

パスが正規表現で指定した条件に一致した場合、別URLにリダイレクトする

RedirectMatch \/img\/(.*) http://sample.com/img/$1

携帯電話の機種の判別 別URLにリダイレクトする


<Files ~  "(^$|index\.html|^\/$|index\.cgi)">
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR]
RewriteCond %{HTTP_USER_AGENT} J-PHONE [OR]
RewriteCond %{HTTP_USER_AGENT} Vodafone [OR]
RewriteCond %{HTTP_USER_AGENT} UP.Browser [OR]
RewriteCond %{HTTP_USER_AGENT} MOT [OR]
RewriteCond %{HTTP_USER_AGENT} SoftBank [OR]
RewriteCond %{HTTP_USER_AGENT} KDDI [OR]
RewriteCond %{HTTP_USER_AGENT} DDIPOCKET [OR]
RewriteCond %{HTTP_USER_AGENT} WILLCOM [OR]
RewriteCond %{HTTP_USER_AGENT} ASTEL|PDXGW
RewriteRule ^(.*)$ http://sample.jp/mobile/ [L,R] 
</Files>

移転時のサイト引継ぎ 301リダイレクト

redirect 301 /(.*) http://www.xxxx.com/$1

Rewrite 動的ページを静的ページにみせる

例1. クエリーを渡す

RewriteEngine on
RewriteRule ^(.+)?-(.+)?-(.+)?$ /rewrite.cgi?mode=$1&word=$2&page=$3 [L]

例2. Pathinfoを渡す

RewriteEngine on
RewriteRule ^/(.*)$ /dispatch.cgi/$1 [L]

ベーシック認証

パスワード式のアクセス制限

AuthType Basic
AuthName "パスワードを入力してね"
AuthUserFile /home/.htpasswd パスワードを記述したファイルのパス
require valid-user

ダイジェスト認証

パスワード式のアクセス制限

ベーシック認証よりも強固

AuthType Digest
AuthName "パスワードを入力してね"
AuthUserFile /home/.htpasswd パスワードを記述したファイルのパス
require valid-user

.htaccessファイルを転送する

.htaccessの編集が終わったら、FFFTPでサーバに転送してください。 .htaccessを置いたディレクトリ及びその下のサブディレクトリ全てにその設定が反映されます。 FFFTPでファイル名変更&アップロード

Apache側の設定

etc/httpd/conf/httpd.conf

httpd.confに直接書き込む方法は設定を一元管理できるというメリットがありますが、設定を反映させるためにサービスの再起動をしなくてはいけません。
conf.d以下での個別設定を有効にする。
バーチャルドメインを用いて管理分散する場合に非常に有効な手段。

Include /etc/httpd/conf.d/*.conf

パスワード認証によるアクセス制限

linuxコマンドから認証ユーザーとパスワードを追加する。

オプションに-cをつけると新規作成。追加のときは-cはいらない。

ベーシック認証

$ htpasswd -c .passed user
Enter Password: (パスワード入力)
Retype Password: (再びパスワード入力)
Adding...

ダイジェスト認証

$ htdigest -c .passed relm user
Enter Password:
Retype Password:
Adding...