是这样的,我完成一个 Laravel 项目后,打算把它转移到 Nginx 上,之前图方便,所以在开发环境下都是 php -S localhost:1234 来启动 HTTP 服务器,并没有在 Nginx 下开发,服务器是 Ubuntu 14.10。
把整个项目复制到 /usr/share/nginx/html 后,修改 app/storage 权限为 777,然后浏览器访问 / 可以访问,但除了 / 路由其他路由全部返回 404,比如 /home 返回 404 NOT FOUND,而在开发时是没有这些问题的。数据库这些都没问题,因为开发是在同一台机上。
下面是我的 Nginx 配置文件:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ /index.php;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
我在 stackoverflow 看到了同样的问题,于是试着修改我的 Nginx 配置文件添加上:
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
还是 404,未能解决。
后来我又在 Nginx 根目录下新建了一个 Laravel 项目,修改 app/storage 权限后访问根路由正常,而访问其他自定义路由同样 404,比如:
app/route.php
Route::get('home', function()
{
return View::make('hello');
});
水平实在菜,真是无计可施了,请高手解疑,非常感谢。
您好,
为您搜索到这个,不确定是否有帮助喔:http://laravel.io/forum/05-08-2014-nginx-laravel-routing-shows-404
location / {
rewrite ^/(/.*)?$ /index.php$1 last;
}
location = / {
index index.php;
}
location ~ (.+\.php\d?)($|/) {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
set $script $request_filename;
if ($request_filename ~ ^(.+\.php\d?)(/.*)$){
set $script $1;
set $pathinfo $2;
}
fastcgi_param PATH_INFO $pathinfo if_not_empty;
fastcgi_param SCRIPT_FILENAME $script;
include fastcgi_params;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。