Я испытываю затруднения из-за маршрутов laravel на nginx Сервере. Это показывает "404, не найденные" для всех маршрутов, за исключением по умолчанию, очень похожего на эту проблему: https://stackoverflow.com/questions/21091405/nginx-configuration-for-laravel-4
Решение той проблемы:
server { listen 80; server_name sub.domain.com; set $root_path '/srv/www/htdocs/application_name/public'; root $root_path; index index.php index.html index.htm; try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index /index.php; include /etc/nginx/fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } location ~ /\.ht { deny all; } }
это работает хорошо, единственная проблема состоит в том, что мне нужен root_path, чтобы быть/srv/www/htdocs, потому что у меня есть другие проекты, работающие там к. Каждый раз, когда я изменяю строку:
set $root_path '/srv/www/htdocs/application_name/public';
кому:
set $root_path '/srv/www/htdocs';
проблема запускается на URL как: localhost/application_name/public/users
Нужно изменить блок @rewrite
, чтобы разделить имя и URL приложения внутри него.
Попробуйте так:
location @rewrite {
rewrite ^/(?<appname>[^/]+)/public/(?<appurl>.+)$ /$appname/public/index.php?_url=/$appurl last;
}
Итак, здесь мы захватываем первую часть URI запроса к переменной $appname, а затем URL внутри приложения к переменной $appurl. Затем мы используем эти две переменные для перезаписи доступа к реальному URL в файловой системе.
BTW. Вам вообще не нужно устанавливать строку $root_path
, вы можете использовать root /srv/www/htdocs
напрямую. Также можно полностью удалить блок ~* ^/(css|img|js|flv|swf|download)/(.+)$
, так как внутри него нет смысла переустанавливать директиву root
.