У меня есть конфигурация nginx, которая выглядит так:
location ^~ /movies {
alias /var/dp.cx/movies/current/public;
fastcgi_index index.php;
try_files $uri /movies/index.php;
location ~* \.php {
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include /etc/nginx/fastcgi_params;
}
}
Это приложение Laravel, которое работает практически полностью из коробки. Однако у меня есть несколько небольших проблем с этой конфигурацией.
/movies
вызывает ошибку 404. Удар /movies/
работает успешно./movies/test?page=2
) не имеет информации из строки запроса.Я не уверен, где я нашел эту конфигурацию, но, похоже, она наиболее близка к "рабочей" конфигурации, которую я когда-либо находил для nginx + fpm с URL-адресом подкаталога.
Нажатие / movies вызывает ошибку 404. Нажатие / movies / работает успешно.
Чтобы решить эту проблему на уровне сервера ... добавьте следующий блок местоположения рядом с существующим блоком местоположения для фильмов ...
location = /movies {
return 301 $scheme://$host/movies/;
}
При нажатии на один из URL-адресов пагинации (/ movies / test? Page = 2) информация из строки запроса не поступает.
Это связано с try_files
строка, которая не передает строку запроса. Чтобы передать его, используя следующие try_files
директива будет работать ...
try_files $uri /movies/index.php$is_args$args;
Прямая цитата из http://nginx.org/en/docs/http/ngx_http_core_module.html ...
$ is_args - «?» если строка запроса имеет аргументы, или пустую строку в противном случае.