Apacheの覚書

Apacheの公式サイト

.htaccessでできること


参考リンク

便利ツール: .htaccessEditor

.htaccessの有効範囲

.htaccessの有効範囲は配置先ディレクトリと、そこから先の下層ディレクトまでにおよぶ。

htaccessの有効範囲

図のようにanimalフォルダに .htaccessファイルを配置した場合、animalフォルダのファイルだけでなく、fishフォルダ以降の下層ファイルにも影響を与える。

別のURLへリダイレクト

サンプル

.htaccess


	<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteBase /
	RewriteCond %{REQUEST_URI} /sample/apache/htaccess_redirect/a/animal/fish/sakana.html
	RewriteRule ^(.*)$ http://example.com/ [R=301,L]
	</IfModule>
	

.htaccess の配置



コードの解説

サンプルは、URL「/sample/apache/htaccess_redirect/a/animal/fish/sakana.html」にアクセスされた時、 「http://example.com/」にリダイレクトさせる方法である。

mod_rewrite.cはApacheのURL書換機能である。 <IfModule mod_rewrite.c> はmod_rewrite.cが有効になっているか判定している。
「RewriteEngine on」は機能開始の合図である。
「RewriteBase /」はURL書換え後のベースということらしい。これがないとローカル環境の物理パスになってしまう。

RewriteCondは、判定、つまりif文のような働きである。 サンプルの場合、「 /sample/apache/htaccess_redirect/a/animal/fish/sakana.html 」であるなら、次のRewriteRule~ に進む。
正規表現や拡張で判定することもできる。

RewriteRuleは、リダイレクト先のURLである。相対パスで指定することも可能(例:/sample/top.html)

.htaccessを修正するときの注意点

.htaccessを修正したら、ブラウザのキャッシュを一旦削除する必要がある。(Chromeの場合)


同一ドメイン内でページの引っ越し

「/note_prg/other/diagram.php」
↓ 引っ越し
「/note_prg/other/diagram/diagram.html」

.htaccess

	<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteBase /
	RewriteCond %{REQUEST_URI} /note_prg/other/diagram.php
	RewriteRule ^(.*)$ /note_prg/other/diagram/diagram.html [R=301,L]
	</IfModule>
	
.htaccessの場所
/note_prg/other/.htaccess

複数URLのリダイレクト

複数のURLを条件に含める場合は、[OR]で連結する。
リダイレクト先が他にもあるなら、モジュールを分けて記述することもできる。

.htaccess


	<IfModule mod_rewrite.c>
		RewriteEngine on
		RewriteBase /
		RewriteCond %{REQUEST_URI} /sample/apache/htaccess_put_rules/a/animal/animal.html [OR]
		RewriteCond %{REQUEST_URI} /sample/apache/htaccess_put_rules/a/animal/fish/fish.html
		RewriteRule ^(.*)$ /sample/apache/htaccess_put_rules/b.html [R=301,L]
	</IfModule>
	
	<IfModule mod_rewrite.c>
		RewriteEngine on
		RewriteBase /
		RewriteCond %{REQUEST_URI} /sample/apache/htaccess_put_rules/a/a.html
		RewriteRule ^(.*)$ /sample/apache/htaccess_put_rules/c.html [R=301,L]
	</IfModule>
	



サンプル

/sample/apache/htaccess_put_rules/b.html
/sample/apache/htaccess_put_rules/a/a.html
/sample/apache/htaccess_put_rules/a/animal/animal.html
/sample/apache/htaccess_put_rules/a/animal/fish/fish.html
/sample/apache/htaccess_put_rules/a/animal/fish/sakana.html

アクセスを禁止する

.htaccessに「deny_from_all」を記述するとアクセス拒否ができる。
アクセス拒否は.htaccess を配置したフォルダ内および、その下層フォルダ内の全ファイルが影響する。

下記のサンプルは、animalフォルダ以降へのアクセスをすべて拒否する例である。

.htaccess


	<IfModule mod_rewrite.c>
		deny_from_all
	</IfModule>
	

.htaccess の配置



赤枠内のファイルにはURLアクセスできない。

検証

/sample/apache/deny_from_all/b.html
/sample/apache/deny_from_all/a/a.html
/sample/apache/deny_from_all/a/animal/animal.html
/sample/apache/deny_from_all/a/animal/fish/fish.html
/sample/apache/deny_from_all/a/animal/fish/sakana.html


指定したIPアドレスのみ許可する.htaccessの設定

指定したIPアドレスのみ許可する「.htaccess」の設定

	Order deny,allow
	Deny from all
	Allow from XXX.XXX.XXX.XXX
	

ローカルのみ許可する

	Order deny,allow
	Deny from all
	Allow from 127.0.0.1
	

参考サイト