У меня есть конфигурация 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 - «?» если в строке запроса есть аргументы, или пустая строка в противном случае.