nginxでZend Framework(rewrite)を利用する
nginx + php-fpm + pecl-apcで構築されたサーバでZend Frameworkを利用する際に、
.htaccessが使えないことで以下のような記述ができませんでした。
## リライトエンジンを有効に。
RewriteEngine On## リライトの対象パスを指定
RewriteBase /## リライトルールを宣言(画像、CSS、Javascript)以外をindex.phpに転送する。
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
通常の Apache の場合などには、.htaccessで上記のように表現できますが、
nginxでは、現状各ユーザ毎のフォルダに設置して対応する方法がないようです。
具体的にいうと、nginx.confでincludeをサポートしているので、
各ユーザ領域に設定ファイルの断片をおいて、includeさせることまではできると思われますが、
そこを修正しても、読み込み直さないと反映されないので、意味がないという事になります。
よって、対策としては、容易に設定修正できないという難点は致し方ないとして、
/etc/nginx/nginx.conf(ファイルパスは環境により異なります。)、
または、includeしている /etc/nginx/conf.d/***.confの中の該当のドメイン設定部分に
以下のように追記します。
server {
listen 80;
server_name test.example.com ;
location / {
root /home/Web;
index index.php index.cgi index.html index.htm;
rewrite ([^(js|ico|gif|jpg|png|css)])$ index.php;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/Webdir/hattara.info/main/web/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
これでとりあえず動くようになります。
現状だと、逆にいえばこれしかできないような気もする。。
.htaccessみたいに外部で設定できるようにできたり、rewriteの設定がもう少しわかりやすいといいなぁと思うけど、
これが速度とのトレードオフなのかもしれないですね。
ということで、rewriteとかの設定で、超はまりまくったけど、今日はこの辺で。
新品価格 |
Trackbacks/Pingbacks