最近Concrete5の動向が気になるので、適当なSmartOSにインストールして設定してみた。
で、リクエストアドレスから/index.php/を除外するプリティーURLという設定とnginxのお話。
.htaccessの設定例が表示されるがNginxには無意味だった
管理画面でプリティーURLを有効にすると、.htaccess用の設定が表示され、ファイルのパーミッションが適切ならば自動で作成もしてくれる。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . index.php [L]
</IfModule>
...だが今回Nginxとphp-fpmを使っていたので.htaccessは無意味なファイルとなってしまう。
代わりにNginx用にコンフィグの生成を行った。
Nginx用のRewriteRule
/usr/local/concrete5/wwwrootに一式展開したとして、下記のように設定した。
root /usr/local/concrete5/wwwroot;
index index.php index.html;
location / {
if (!-e $request_filename) {
rewrite ^ /index.php last;
}
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SERVER_NAME $host;
fastcgi_param SCRIPT_FILENAME /usr/local/concrete5/wwwroot$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
一応解説、NginxのLocationディレクィブはマッチ条件により優先順が違うので、上記はそのまま評価順ではありません。
request_filenameにあたるファイルがなければindex.phpにリライト- phpファイルへのリクエストはfastcgiとしてphp-fpmへ
- /.htを含むリクエストは403
の3つを指定しました、元のRewriteCondの2つめ3つめはindexディレクティブが吸収して、ファイル存在チェックの時点でindex.(php|html)が付与されて考慮されるため必要はありません。
fastcgi_paramやHeaderは利用用途に応じて追加しましょう。