Quantcast
Channel: しのぶら!!! » sawanoboly
Viewing all articles
Browse latest Browse all 15

Concrete5のプリティーURLにNginxを対応させる

$
0
0

最近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ディレクィブはマッチ条件により優先順が違うので、上記はそのまま評価順ではありません。

  1. request_filenameにあたるファイルがなければindex.phpにリライト
  2. phpファイルへのリクエストはfastcgiとしてphp-fpmへ
  3. /.htを含むリクエストは403

の3つを指定しました、元のRewriteCondの2つめ3つめはindexディレクティブが吸収して、ファイル存在チェックの時点でindex.(php|html)が付与されて考慮されるため必要はありません。

fastcgi_paramやHeaderは利用用途に応じて追加しましょう。


Viewing all articles
Browse latest Browse all 15

Trending Articles