我在 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