blogですかい

株式会社Loco Partnersに勤めるエンジニアうちの一人のブログ。仕事、プライベートで学んだことなどを発信し、その内容がたとえ少数でも誰かの役に立ったらなら、それはとっても嬉しいなって

Apache Alias設定下でのRewrite

<Virtualhost *:80>
    ServerName example.com
    DocumentRoot /var/www/docroot
    Alias /alias/ /var/www/alias/
</Virtualhost>

という設定のApacheなwebサーバにて、
.htaccessの中でRewriteを使用する際の注意事項。

例えば

#/var/www/alias/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

上記のように.htaccessが設定されていると、http://example.com/alias/ へのリクエストは、
内部的にDocumentRoot側へリダイレクトされる。 (URIの /alias/ が /var/www/alias/index.php に書き換えられる。
/var/〜はAlias設定にマッチしないので、DocumentRootへのアクセスとして処理される)

解決方法

#/var/www/alias/.htaccess
RewriteEngine On
RewriteBase /alias
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

というように、RewriteRuleを書く.htaccessにRewriteBaseを設定すれば
http://example.com/alias/ で /var/www/alias/index.php にアクセスできます。