我有自己的MVC,其中包含大量具有此文件夹结构的应用程序:
这是我在nginx上的设置:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
if (!-e $request_filename){ rewrite ^(.*)$ /index.php?rt=$1 break; }
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ .php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
答案 0 :(得分:0)
这两行:
if (!-e $request_filename){ rewrite ^(.*)$ /index.php?rt=$1 break; }
try_files $uri $uri/ /index.php$is_args$args;
尝试执行相同的功能。如果文件不存在,请尝试/index.php
。
第一行由于break
失败,它试图在/index.php
块而不是location /
块中处理location ~ \.php$
。
要更正第一行,应使用last
代替break
。有关详细信息,请参阅this document。
但如果您包含try_files
行,则不需要if ... rewrite
语句。以下内容执行类似的功能:
try_files $uri $uri/ /index.php?rt=$uri&$args;
我更喜欢try_files
方法,但要么应该有效,但你不需要两者。 try_files
是documented here。关于if
块的使用,请注意this caution。
另外,请注意location ~ \.php$
块的一些问题:
try_files
指令应以URI或= 404结尾 - 而不是两者