Я боролся с конфигурацией NGINX. Я настроил среду разработки (локальный ноутбук) с конфигурацией, поддерживающей URL-адреса, удобные для поисковых систем (SEF), но такая же конфигурация, похоже, не работает на моем тестовом сервере.
локальная конфигурация:
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
ошибка. Имейте в виду, если я назову URL-адрес, заканчивающийся на коллекцию, все будет работать нормально ..
Кто-нибудь может мне помочь с этим, пожалуйста? если потребуется дополнительная информация, дайте мне знать ..
Нет необходимости указывать SCRIPT_FILENAME отдельно в блоке расположения PHP. Он уже определен в файле / 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;
Я понял это. У меня были проблемы с символическими ссылками ... спасибо за вашу помощь. Тем из вас, кто сталкивается с подобными проблемами, убедитесь, что ваша символическая ссылка в /etc/nginx/sites-enabled/
указывает на нужный файл в /etc/nginx/sites-available/