Search

Apacheで.htaccessを使用する

unknown

Apache はデフォルトで、.htaccessの使用が禁止されています。 使えるようにするには、httpd.confAllowOverrideの設定を、NoneAllに変更します。 上書き保存後、Apacheを再起動(Restart)させると、設定が反映されます。

#This controls which options the .htaccess files in directories can
#override. Can also be "All", or any combination of "Options", 
#"FileInfo",
#"AuthConfig", and "Limit"
AllowOverride All

ファイルを隠す

unknown

「.htaccess」、「.htpasswd」を隠す

<Files ~ "^\.(htaccess|htpasswd)$">
order allow,deny
deny from all
satisfy all
</Files>

指定した拡張子のファイルを隠す

複数の拡張子を同時に指定できます。
下記の場合、拡張子が「.dat」、「.log」、「.csv」のファイルを隠します。

<Files ~ "\.(dat|log|csv)$">
deny from all
</Files>

文字化け対策

unknown

HTTPヘッダー内で明示的に文字コードを指定。

AddType "text/html; charset=utf-8" .html

トップページの指定

unknown

URLをスラッシュで終わらせてアクセスすると、通常はそのディレクトリ内のindex.htmlが表示されます。 この設定を変えることで、他のファイルを表示させることが可能になります。

ただし、MIMEタイプで設定されていない拡張子のファイルを設定すると、 ファイルのダウンロードダイアログが表示されてしまうので注意!

指定したファイルは、左が一番優先度が高くなります。

例) DirectoryIndex index.html index.cgi index.php index.shtml
例) DirectoryIndex sample1.html sample2.html index.html

リダイレクト

unknown

Redirect permanent [絶対URLからhttp://ドメイン名を省略したパス] [リダイレクト先]

リダイレクト先は別ドメインのサーバも指定可。

下記の例では、
http://www.shtml.jp/test/もしくはhttp://www.shtml.jp/test/basic.html
へアクセスがあると、
http://www.shtml.jp/htaccess/basic.html
にリダイレクトされます。

例) Redirect permanent /test/ http://www.shtml.jp/htaccess

配布用ファイルがダウンロードできない場合

unknown

配布用ファイルの拡張子のMIMEタイプを.htaccessに設置すれば、解消できます。

#.exe 実行ファイルの配布用
AddType application/octet-stream exe

#.lzh アーカイブの配布用
AddType application/octet-stream lzh

#Macintosh .hqx 圧縮ファイルの配布用
AddType application/mac-binhex40 hqx

#Flash コンテンツの公開用
AddType application/x-shockwave-flash swf

#ZIP ファイルの配布用
AddType application/zip zip

特定のサーバのアクセスを許可/禁止

unknown

allow, deny
構文説明
allow from ホスト ホスト ... allow ホストのディレクトリへのアクセス許可の設定。
deny from ホスト ホスト ... deny ホストのディレクトリへのアクセス拒否を設定。
ホストの種類
内容
all全てのホストのアクセスを許可
ホスト名そのサブドメインに所属するホストのアクセスを許可(後方一致)
IPアドレス指定したIPアドレスを持つホストのアクセスを許可(前方一致)
ネットアドレス
ネットマスク
IPアドレスの先頭の1~3バイト目までを指定してアクセスを制限

deny,allowは半角スペースを空けないこと。

アクセスを許可する

# 指定したアクセスのみ許可
AuthUserFile /div/null
AuthGroupFile /dev/null
AuthType Basic
<Limit  POST GET PUT>
  order deny,allow          # 拒否、一部許可
  deny from all             # とりあえず全て拒否
  allow from tagindex.com   # tagindex.comを許可
  allow from .co.jp         # .co.jpを許可
  allow from localhost      # 端末に直接つながったマシンからのアクセスを許可
</Limit>

アクセスを拒否する

# 指定したアクセスのみ拒否
AuthUserFile /div/null
AuthGroupFile /dev/null
AuthType Basic
<Limit  POST GET PUT>
  order allow,deny    # 許可、一部拒否
  allow from all    # とりあえず全て許可
  # サーバ名の区切りは半角スペース
  deny from .dmedia.co.jp .com .proxy .sankus.or.jp
  # .co.jpを拒否
  deny from .co.jp
  # 123.123.で始まるアドレスを拒否
  deny from 123.123.
</Limit>
# 210.174.122.0からのアクセスのみ許可
AuthUserFile /div/null
AuthGroupFile /dev/null
AuthType Basic
<Limit  POST GET PUT>
  order deny,allow
  deny from all
  # allow from 210.174.122.0/16 と記述してもOK
  allow from 210.174.122.0/255.255.255.0
</Limit>

指定IPアドレスからのアクセスのみ許可

# 203.141.160.32及び210.142.24.49からのアクセスのみ許可
AuthUserFile /div/null
AuthGroupFile /dev/null
AuthType Basic
<Limit  POST GET PUT>
  order deny,allow
  deny from all
  allow from 203.141.160.32 210.142.24.49
</Limit>

複数のアクセス拒否・許可を設定

# yahoo.comとgoo.comからのアクセスを拒否
AuthUserFile /div/null
AuthGroupFile /dev/null
AuthType Basic
<Limit  POST GET PUT>
  SetEnvIf REFERER "yahoo.com" Ref1
  SetEnvIf REFERER "goo.com" Ref2
  order allow,deny
  allow from all
  deny from env=Ref1
  deny from env=Ref2
</Limit>

CGIの使用を許可

unknown

# CGIを実行できる領域に設定
Options +ExecCGI

# 拡張子が".cgi",".pl"の出力は、text/htmlのMIMEタイプを返す
# 訪問者のブラウザは、.htmlを受け取った時と同様に".cgi"ファイルを扱う
AddType text/html .cgi .pl

# .cgiファイルをCGIスクリプトとみなしプログラウを実行するよう定義
AddHandler cgi-script .cgi .pl

SSIの使用を許可

unknown

.htmlにSSIを有効にした場合、全ての.htmlファイルがサーバによる解釈を受けるため、パフォーマンスが低下します。なるべく.html は無効のままにしておいた方がよさそうです。

# SSIを実行できる領域に設定
Options +Includes
AddType text/html .shtml
# 拡張子が".shtml"のファイルをSSIで有効にする
AddHandler server-parsed .shtml

ファイルの一覧を非表示にする

unknown

# ファイルの一覧機能は有効になったまま表示ファイルパターンを指定する方法
# index.htmlの無いディレクトリでもディレクトリ一覧を表示しない
IndexIgnore *

# ファイル一覧機能自体を無効にする方法
# ブラウザでアクセスした際、403 Forbiddenと表示される
Options -Indexes

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

unknown

# パスワードファイル名(絶対パス)
AuthUserFile /home/user/www/passwd/.htpasswd

# グループアクセス制限なし
AuthGroupFile /dev/null

# Basic認証
AuthType Basic

# "ACCESS PROTECE"
AuthName "Please enter username and password"

# POST,GET,PUTに対して制限をかける
<Limit GET POST PUT>
  # testとユーザーに対してのみアクセス許可
  require user test
  order allow,deny
  allow from all
  deny from .zzz.or.jp
</Limit>

エラー発生時の転送先指定、自作エラードキュメント

unknown

デフォルトのエラー画面は、味気ないものです。 もっと分かりやすくシンプルに表示したい場合、以下の設定を変更すれば、エラー発生時に自作のエラードキュメントを表示することができます。 各エラー番号ごとに自作エラードキュメントへのパス、またはURLを指定します。 URLを指定した場合、エラー発生時に指定したURLへ転送されます。

よくあるエラーの種類
エラー番号エラー文字列エラー内容
400Bad Requestサーバーが理解できない要求をした場合。
401Unauthorizedログイン画面などで、認証に失敗した場合。
403Access Forbiddenアクセスが許可されてない場合。
404Not Found指定したフォルダやファイルが存在しない場合。
500Internal Server ErrorCGIの設定ミスなど、サーバー内部でエラーが発生した場合。
503Service Temporarily Unavailableサーバーが高負荷状態でサービス利用が一時停止されている場合。同時に大量のアクセスが集中した時などに発生するエラー。後で、アクセスすれば問題ない。

IEのオプション設定で「HTTPエラーメッセージを簡易表示する」にしていると、 エラードキュメントのファイルサイズが512バイト未満の場合、デフォルトのエラードキュメントが表示されます。 そのため自作エラードキュメントは、ファイルサイズが512バイト以上になるように作成しましょう。

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthType Basic
#エラードキュメントのパスを指定
Error Document 401 /error/401.html
#エラー番号を引数で渡して、エラー番号によって表示する文字列などを
#変更すれば1ページで済みます
Error Document 403 /error/error.php?err=401
Error Document 403 /error/error.php?err=403
#転送先URL指定
Error Document 404 http://転送先URL
<Limit POST GET PUT>
</Limit>

.htaccessなしで自作エラードキュメントを表示させる裏技!

unknown

.htaccessの使用が許可されていないレンタルサーバなどの場合、URLをスラッシュ終わりでアクセスすると、ファイル一覧が表示されてしまいセキュリティ上良くありません。

「URLをスラッシュで終わらせてアクセスすると、通常はそのディレクトリ内のindex.htmlが表示される」というのを逆手に取り、 index.htmlというファイル名でエラードキュメントを作成し、index.htmlの無いフォルダにアップロードします。 URLをスラッシュで終わらせてアクセスすると、ディレクトリ内のファイル一覧が表示されなくなり、 自作のエラードキュメント(実はindex.html)が表示されるはずです!

動的URLを静的URLにする

unknown

PHPやCGIなど、動的URLのページを、静的URLでアクセス可能にするには、mod_rewriteを使用します。 正規表現パターンを自サイトのURLに合うようにします。

URLの後に引数1つある場合

http://localhost/test/pj_roomer/index.php?param=abc
 ↓
http://localhost/test/pj_roomer/index/abc.html

RewriteEngine on
RewriteRule ^/test/pj_roomer/([0-9A-Za-z]+)\.html$ /test/pjroomer/index.php?param=$1

URLの後に引数3つある場合

http://localhost/test/pj_roomer/index.php?param1=abc&param2=def&param3=123
 ↓
http://localhost/test/pj_roomer/index/abc/def/123.html

RewriteEngine on
RewriteRule ^/test/pj_roomer/([0-9A-Za-z]+)/([0-9A-Za-z)+)/([0-9A-Za-z)+)\.html$ /test/pjroomer/index.php?param1=$1&param2=$2&param3=$3

このように静的URLでアクセス可能にすることで、SEO対策に有効と言われています。 動的URLだと静的URLのページに比べ、新しいページしかインデックスされない傾向にあるようです。

当サイトは.htaccessが使用不可のため、トップページ以外は全て動的URLですが、YST、Googleのインデックス数は両方とも約70件。 総ページ数が約90ページなので8割方インデックスされていることになります。

一般的には静的URLの方がインデックスされやすいと言われていますが、どちらにしても、定期的にサイトを更新することがSEO対策として重要です。

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop