Laravel 4.1 em rotas nginx erro 404

1

Estou tendo problemas com as rotas de laravel em um servidor nginx. Ele mostra um "404 não encontrado" para todas as rotas, exceto a padrão, muito semelhante a este problema: link

A solução para esse problema:

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;
    }

} 

funciona bem, o único problema é que eu preciso do root_path para ser / srv / www / htdocs porque tenho outros projetos rodando lá. Sempre que eu mudo a linha:

set $root_path '/srv/www/htdocs/application_name/public';

para:

 set $root_path '/srv/www/htdocs';

o problema começa no url como: localhost / application_name / public / users

    
por tenhsor 09.08.2014 / 01:07

1 resposta

1

Você precisa alterar o bloco @rewrite para separar o nome do aplicativo e o URL dentro do aplicativo.

Tente isto:

location @rewrite {
    rewrite ^/(?<appname>[^/]+)/public/(?<appurl>.+)$ /$appname/public/index.php?_url=/$appurl last;
}

Então, aqui nós capturamos a primeira parte do URI do pedido para a variável $ appname, e então o URL dentro do aplicativo para a variável $ appurl. Em seguida, usamos essas duas variáveis para reescrever o acesso à URL real no sistema de arquivos.

BTW. Você não precisa de set $root_path linha, você pode usar root /srv/www/htdocs diretamente. Você também pode remover o bloco location ~* ^/(css|img|js|flv|swf|download)/(.+)$ completamente, porque não faz sentido reajustar a diretiva root dentro dele.

    
por 09.08.2014 / 03:47