Edited at

VirtualHost での mod_rewrite

More than 5 years have passed since last update.

wordpress 動かしてるサーバで次のように書いてみたら動かなかった。

ログを見るに RewriteCond がうまくマッチしてくれない。

<VirtualHost *:80>

DocumentRoot /var/www/wordpress
DirectoryIndex index.php
Options -Indexes

<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteLog /tmp/rewrite.log
#RewriteLogLevel 9
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
</VirtualHost>

ただしくはこう書き直せば良い。

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d


追記

このようなカタチのほうがポピュラーらしい。

ngyuki さん、ありがとうございます。

<VirtualHost *:80>

DocumentRoot /var/www/wordpress
DirectoryIndex index.php
Options -Indexes

<Directory /var/www/wordpress>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
</Directory>
</VirtualHost>