NGINX 漂亮的 URL:未指定输入文件

NGINX 漂亮的 URL:未指定输入文件

我一直在为 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/

相关内容