ユーザ用ツール

サイト用ツール


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