apache:mod_rewrite
mod_rewrite
URLを書き換えて、別のコンテンツを表示したり、リダイレクトしたりすることができるApache拡張モジュール。
バーチャルホスト(SSL)で使う場合
通常サイトが非バーチャルホストで、SSLサイトがバーチャルホストに設定されている場合、
Listen 80 Listen 443 Include conf/extra/proxy-ajp.conf # ProxyPassが設定されている Include conf/extra/rewrite.conf # RewriteRuleが設定されている <VirtualHost _default_:443> SSLEngine On ... </VirtualHost>
proxyなどの設定はSSLサイトに引き継がれるが、rewriteは引き継がれない。
Listen 80 Listen 443 Include conf/extra/proxy-ajp.conf # ProxyPassが設定されている Include conf/extra/rewrite.conf # RewriteRuleが設定されている <VirtualHost _default_:443> SSLEngine On ... </VirtualHost>
混乱を避けるため、Apacheでは常にバーチャルホストで運用することを推奨する。
RewriteBase
RewriteBaseは、変換後のURLのベースになるディレクトリ。オリジナルのリクエストには影響しない。記述を省略すると設定した場所(.htaccessを置いた場所やDirectoryディレクティブが指定する場所)になる。
ドキュメントルート/hoge/.htacess に以下の記述を行った場合、
RewriteEngine on RewriteBase /fuga/ RewriteCond %{REQUEST_URI} \.html$ RewriteRule ^(.*)$ $1 [L]
/hoge/moge/index.html へアクセスすると、リクエストは /fuga/moge/index.html に変換される。
※ RewriteRule の ^(.*)$ がマッチするのは.htaccessを設置したパス以下、すなわち moge/index.html であって、オリジナルのURLの /hoge/ の部分は変換後のURLに渡されない点にも注意
ただし、この書き方をすると /hoge/index.html が /fuga/index.html に変換されない。
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} \.html$ RewriteRule ^(.*)$ /fuga/$1 [L]
とするのが正解。RewriteBaseは基本的にドキュメントルートを基点に変えるディレクティブだと思ったほうがいいだろう。
apache/mod_rewrite.txt · 最終更新: 2011/06/01 04:00 by nullpon