mod_rewrite使えばいいじゃん。・・・あれ、動かんwwwwwでかーっとなって書いたメモ

さくらvpsのDocumentRootに設定しているディレクトリに.htaccess置いてどのURLでアクセスされてもindex.php経由する設定をしようとしたけど、うまく動かなかった時のメモ。

注意点1
.htaccessパーミッションを604に変更する

注意点2
.htaccessが動いていなかった原因 → AllowOverride None になっていたから
virtualHostの該当部分を以下のように設定すること

<VirtualHost *:80>
    ServerName sample.com
    DocumentRoot /var/www/html/sample.com

    <Directory /var/www/html/sample.com>
        AllowOverride All
        Options FollowSymLinks
    </Directory>
</VirtualHost>

注意点3
デフォルト設定は上位ディレクトリの設定を引き継ぐ
上の例だと以下のように「AllowOverride None」となっていたため、 .htaccessが効かない設定になっていた

<Directory "/var/www/html">
    Options -Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

注意点4
「Options FollowSymLinks」ってなんだっけ。忘れたwwww
これはシンボリックリンクを許可する設定。たとえばsample.comフォルダの下に別ディレクトリへのリンクを貼って、この設定がされているとURLから別ディレクトリへアクセスが可能となる。逆に以下のように-をつければ設定を打ち消す事が可能。

    <Directory /var/www/html/sample.com>
        Options -FollowSymLinks
    </Directory>

注意点5
mod_rewriteを使いたくば、Options FollowSymLinks を有効にせなあかん。

注意点6
さくらサーバーだと例えば ttp://sample.com/list にアクセスした場合、そのディレクトリ内にlist.htmlやらlist.phpがあると勝手にアクセス先をlist.htmlやらlist.phpに書き換えてしまうらしい。通常は便利なんだろうが、今回これのせいでうまく動かなかったので、注意すること。

今回設定した.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteBase /
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

今日も1000円通貨からのFXに励もう。