URLが存在しない場合トップにリダイレクトする.htaccessの設定

検索すれば出てくるけど一応メモ。

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
ファイルが存在しない場合

RewriteCond %{REQUEST_FILENAME} !-d
ディレクトリが存在しない場合

RewriteRule . /index.php [L]
/index.phpにリダイレクトして終了する。


ちなみにwordpressは次のような感じだった。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
ファイルが存在するか、もしくは

RewriteCond %{REQUEST_FILENAME} -d
ディレクトリが存在すれば

RewriteRule . - [L]
置換をしないで終了 。参考('-' と呼ばれる特殊な置き換え文字列・・・)

RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
「wp-」が先頭についたファイルなら終了

RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
phpファイルだったら終了

RewriteRule . index.php [L]
上記以外はindex.phpにリダイレクトして終了。

 

<関連記事>

Apacheの設定でサーバーメンテナンス中にメッセージを表示