Nginx

NGINX漂亮的網址:沒有指定輸入文件

  • July 3, 2014

我一直在努力使用 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;
}

在我的開發環境中一切都很好。但是在我的測試環境中,當我在瀏覽器中呼叫一個帶有漂亮添加的 url 時:collection/

$$ brand $$/$$ product $$. 我得到: No input file specified 錯誤。請注意,如果我呼叫以 collection/ 結尾的 url,一切正常.. 任何人都可以幫我解決這個問題嗎?如果需要更多資訊,請告訴我..

我已經想通了。我的符號連結有問題…感謝您的幫助。對於那些遇到類似問題的人,請確保您的符號連結/etc/nginx/sites-enabled/指向正確的文件/etc/nginx/sites-available/

無需在 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;

引用自:https://serverfault.com/questions/607817