.htaccessを使用するには、メインの設定ファイル (httpd.conf) でその使用が許可されている必要があります。
クライアントが新しいURLを取得するように、リダイレクトを送ります。
Redirect [status] URL-path URL
キーワード | HTTPステータス | 説明 |
---|---|---|
permanent | 301 | 永久に移動した |
temp | 302 | 一時的に移動した (既定値) |
seeother | 303 | 他のもので置き換えた |
gone | 410 | 永久に削除した |
URL-pathはリダイレクト元のURLで、スラッシュ ( / ) から始まる絶対パスで記述します。
URLはリダイレクト先のURLで、スキーム名 (httpなど) から始まる絶対URLで記述します。URL-pathと同様にスラッシュから始まるパスで記述した場合には、現在のスキーム名とホスト名を指定したものとみなされます。ただしサーバの設定によっては正常に処理されないことがあるので、絶対URLで記述すべきです。
Redirect permanent /xxx/yyy http://www.example.com/zzz
これは、例えば次のようにリダイレクトされます。
http://www.example.com/xxx/yyy/index.html ↓ http://www.example.com/zzz/index.html
書き換えを使用するには、あらかじめ設定ファイル (httpd.conf) でmod_rewriteモジュールが読み込まれている必要があります。
また書き換えを有効にするには、最初にRewriteEngineディレクティブの設定で[on]を指定する必要があります。
RewriteEngine on|off
RewriteRule Pattern Substitution [flags]
Patternは.htaccessファイルが置かれたディレクトリの、後のスラッシュ ( / ) を除いたパスが対象となります。つまり、
RewriteRule ^(.*)$ xyz/$1
というパターンで.htaccessがhttp://www.example.com/にあるならば、
http://www.example.com/index.html ↓ http://www.example.com/xyz/index.html
のように書き換えられます。
ただしPatternがマッチする対象は、RewriteBaseディレクティブを設定することにより変化します。
SubstitutionでURLパスを指定する場合は、ドキュメントルートからの相対パスとなります。
キーワード | 説明 |
---|---|
NC (nocase) | 大文字と小文字を区別しない |
NE (noescape) | URLエスケープを行わない |
L (last) | 書き換えを終了し、これ以上書き換えルールが適用されないようにする |
R (redirect) | リダイレクトを強制する |
RewriteCond TestString CondPattern [flags]
TestStringがCondPatternの条件に一致する場合のみ、書き換えが実行されます。
キーワード | 説明 |
---|---|
NC (nocase) | 大文字と小文字を区別しない |
OR (ornext) | 次の条件も考慮する |
NV (novary) |
RewriteEngine on RewriteCond %{HTTP_HOST} ^(example\.com)(:80)? [NC,OR] RewriteCond %{HTTP_HOST} ^(www2\.example\.com)(:80)? [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
URLのクエリストリングを、パス名の一部であるかのように偽装します。このようにして作成されたURLを、静的URLと呼称します。
この方法を用いると、例えば
http://example.com/?a=1&b=2
のようなクエリを含むURLを
http://example.com/a=1/b=2/
のように表せます。
これを実現するにはアクセスされた際に本来のURLに書き換えるように、RewriteRuleで次のように指定します。これ例ではクエリの数が変化することも考慮して、2パターンの書き換え規則を定義しています。
RewriteRule ^([^/]+)/ ?$1 [L] RewriteRule ^([^/]+)/([^/]+)/ ?$1&$2 [L]
なおこのようにしてURLを書き換えた場合、静的URLが相対パスの基準となります。そのため画像や他ページへのリンクが相対パスで記述されている場合には、パスがずれてしまい問題が生じます。
RewriteRuleは書き換え時にURLエンコードを行います。そのためクエリ文字列に特殊文字を含むとき、URLが書き換えられた場合とそうでない場合でクエリが異なってしまいます。
http://www.example.com/index.html?q=%E6%96%87%E5%AD%97 ↓ http://www.example.com/index.html?q=%25E6%2596%2587%25E5%25AD%2597
この問題はRewriteRuleにNE (noescape) フラグを指定して、エスケープを抑制することで解決できます。Pukiwiki移転の際に便利なmod_rewriteの設定メモ
RewriteRule ^(.*)$ http://www.example.com/$1 [NE]
ErrorDocument error-code document
ErrorDocument 401 /error/401.html ErrorDocument 403 /error/403.html ErrorDocument 404 /error/404.html ErrorDocument 500 /error/500.html
リンク切れなどによって無効なページが表示された場合に備えてカスタマイズした404ページを用意しておくことで、問に有効なリンク先を提示することができます。
404 ページのカスタマズ - ウェブマスター/サイト所有者 ヘルプ
確実にエラーページを表示させるには、エラーページのサイズを512バイト以上にする必要があります。これはInternet Explorerの「HTTPエメッセージの簡易表示」機能を回避するためです。Internet Explorerの "HTTP エラー メッセージの簡易表示" 機能をサーバー側で無効にする方法
Order ordering
キーワード | 説明 |
---|---|
Deny,Allow | DenyをAllowより先に評価る。既定ではアクセスを許可 |
Allow,Deny | AllowをDenyより先に評価する。既定ではアクセスを拒否 |
Mutual-failure | Allow,Denyと同義。(このキーワードは非推奨) |
Allow from all | host
Deny from all | hostDeny ディレクティブ - Apache HTTP サーバ
<FilesMatch regex> ... </FilesMatch><FilesMatch> ディレクティブ - Apache HTTP サーバ
<FilesMatch "\.(gif|jpe?g|png)$"> Order Allow,Deny Deny from all </FilesMatch>
AuthType Basic AuthName [記憶領域の名前] AuthUserFile [ユーザー名とパスワードの一覧を格納したファイルのパス] Require valid-user
AuthNameは記憶領域の名前を表し、クライアントに対して使用するユーザー名とパスワードを通知するために用いられます。この名前にスペースが含まれる場合には、引用符 ( " ) で囲まなければなりません。
AuthUserFileで参照するファイルは、以下のようにユーザー名と暗号化したパスワードをコロン ( : ) で区切り、行ごとに列挙したものになります。
[ユーザー名1:暗号化したパスワード] [ユーザー名2:暗号化したパスワード] . .