我一直在为 NGINX 配置而苦恼。我设置了一个开发环境(本地笔记本电脑),其配置支持搜索引擎友好 (SEF) URL,但同样的配置似乎无法在我的测试服务器上运行。
本地配置:
server {
server_name example;
root /home/arciitek/git/example/public;
client_max_body_size 500M;
location /collection/ {
try_files $uri $uri/ /collection/index.php$args;
index index.php;
}
location / {
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/arciitek/git/example/public/$fastcgi_script_name;
}
}
这很好用。现在在测试环境中它看起来是这样的:
server {
server_name dev.example.com;
access_log /srv/www/dev.example.com/access.log;
error_log /srv/www/dev.example.com/error.log debug;
root /srv/www/dev.example.com/public;
location /collection/ {
try_files $uri $uri/ /collection/index.php$args;
index index.php;
}
location / {
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/dev.example.com/public/$fastcgi_script_name;
}
在我的开发环境中一切都很好。但在我的测试环境中,当我在浏览器中调用添加了 prettyness 的 URL 时:collection/[brand]/[product]。我得到了:错误
No input file specified
。请注意,如果我调用以 collection/ 结尾的 URL,一切都很好。
有人能帮我吗?如果需要更多信息,请告诉我。
答案1
无需在 PHP 位置块中单独指定 SCRIPT_FILENAME。它已在 /etc/nginx/fastcgi_params 文件中定义。
因此,删除该fastcgi_param SCRIPT_FILENAME
行。
此外,为了 PHP 脚本的安全性,我想补充一点:
fastcgi_split_path_info ^(.+\.php)(/.+)$;
到 PHP 位置块。
否则,您确定您已经到位了吗/collection/index.php
?
编辑:
正如@AlexeyTen 在下面指出的那样,替换它:
try_files $uri $uri/ /collection/index.php$args;
和:
try_files $uri $uri/ /collection/index.php?$args;
答案2
我搞明白了。我的符号链接出了问题……谢谢你的帮助。对于那些遇到类似问题的人,请确保你的符号链接/etc/nginx/sites-enabled/
指向正确的文件/etc/nginx/sites-available/