Laravel 4.1 на nginx направляет ошибку 404

Я испытываю затруднения из-за маршрутов 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

1
задан 23 May 2017 в 15:41
1 ответ

Нужно изменить блок @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.

.
1
ответ дан 4 December 2019 в 00:20

Теги

Похожие вопросы