Laravel 4.1 在 nginx 路由上出现错误 404

Laravel 4.1 在 nginx 路由上出现错误 404

我在 nginx 服务器上使用 laravel 路由时遇到了问题。除了默认路由外,所有路由都显示“404 未找到”,与此问题非常相似:https://stackoverflow.com/questions/21091405/nginx-configuration-for-laravel-4

这个问题的解决方案是:

服务器 {

    听80;
    服务器名称 sub.domain.com;
    设置 $root_path'/srv/www/htdocs/application_name/public';
    根 $root_path;

    索引 index.php index.html index.htm;

    尝试文件$uri $uri/@rewrite;

    位置@rewrite {
        重写 ^/(.*)$ /index.php?_url=/$1;
    }

    位置 ~ \.php {

        fastcgi_pass 127.0.0.1:9000;
        fastcgi_索引/index.php;

        包括/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;
    }

    位置 ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
        根 $root_path;
    }

    位置 ~ /\.ht {
        全部否认;
    }

}

它运行良好,唯一的问题是我需要将 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

您需要更改@rewrite块以分隔应用程序名称和应用程序内部的 URL。

尝试这个:

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

因此,我们在这里将请求 URI 的第一部分捕获到 $appname 变量中,然后将应用程序内部的 URL 捕获到 $appurl 变量中。然后我们使用这两个变量重写对文件系统上真实 URL 的访问。

set $root_path顺便说一句。你根本不需要行,你可以root /srv/www/htdocs直接使用。你也可以完全删除块,因为在里面location ~* ^/(css|img|js|flv|swf|download)/(.+)$重新设置指令是没有意义的。root

相关内容