まず、私は同様の質問を検索しようとしましたが、これらの質問に対する解決策は特定のコード行であり、私のニーズに合わせてカスタマイズできませんでした。nginxはホワイトリストを除いてindex.phpをすべて書き換えます
私はCodeigniterをインストールしており、Apacheからnginxに移行しようとしています。しかし、Apacheでは、.htaccessは非常に単純でした:ホワイトリストをとり、他のものはすべてindex.php
に書き換えます。
RewriteEngine on
RewriteCond $1 !^(index\.php|css|images|core|uploads|js|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
は、しかしnginxの中で、私はifとtry_filesディレクティブを試してきただけでなく、無駄に、場所をいじり。私はまだ、どのようにnginxがサーバーの設定を読んでいるのか新しく、チュートリアルのオンラインはややこしいです。
さらに、index.phpはWebルートにはなく、サブディレクトリserver
にあります。このため
は、私も/サーバーで始まるも、URI要求がディレクトリに行っていないことを確認する必要がありますが、index.php
にこれはこれまでのところ、私のnginxのバーチャルホストの設定です:
server {
listen 80;
server_name example.com;
root /home/example/public_html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location/{
index index.htm index.html index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/example.sock;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* ^.*(/|\..*) {
try_files $uri $uri/ /server/index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
リクエストをindex.php
にリダイレクトするのに役立ちますが、ホワイトリストはありません。もし誰かがそれぞれの部品が何をしているかの簡単な説明をして、実例を生み出すことができたら、私はそれを感謝します。
ありがとう、それはトリックでした!私もpathinfoの事を見て、それは面白いようです。 – xiankai
http://wiki.nginx.org/IfIsEvil http://wiki.nginx.org/Pitfalls – VBart
IfIsEvildドキュメントによれば、書き直し...最後に;安全ですが、(もちろん、これは何らかの種類のwikiです)歓迎されています。 – complex857