Назад | Перейти на главную страницу

Красивые URL-адреса NGINX: входной файл не указан

Я боролся с конфигурацией 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/