首页  >  问答  >  正文

php - laravel部署到linux,将public文件夹指定为网站根目录,但是无法访问其子文件夹

本机使用的是window环境,一切正常,但是部署到linux系统上(配的是nginx),在访问的时候,控制器和方法都能正常执行,页面也可以输出,但是输出的页面却缺少css文件,一查是500错误,已经将请求重定向到public文件夹下,
我的目录结构是:

public/web/css/css.css

域名是:

aaa.com 

直接访问aaa.com就会执行Publc/index.php(因为设置了nginx,将请求重定向到public文件夹下),也可以正常输出页面,但是页面上请求的:

url:aaa.com/web/css/css.css

却是500错误,百思不得其解,请大神指教.谢谢各位.


现在发现一部分问题是nginx配置问题,网上抄了个设置:

server {
        listen       80;
        server_name  xxx;

        access_log  xxx  main;

        root       xxx;
        #root       xxx;
        index      index.php index.html index.htm;

        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            #fastcgi_split_path_info ^(.+\.php)(/.+)$;
        }

   }

虽然现在可以访问首页了,但是现在有了另外的问题,我的项目是带有前后台的,前台可以访问,但是后台无法访问,我是这样实现前后台的,使用路由分离,我在RouteProvider.php中的map方法配置了两个路由文件:

    public function map(Router $router) {
        //加载前台路由文件
        $router->group([
            'namespace' => 'App\Http\WebControllers',
//             'prefix' => 'Web',//引入前缀
            //'middleware' => 'some_common_middleware',
                ], function ($router) {
            require app_path('Http/routes/routes.php');
        });
        //加载后台路由文件
        $router->group([
            'namespace' => 'App\Http\AdminControllers',
            'middleware' => 'App\Http\Middleware\LoginMenuMiddleware',
            'prefix' => 'Am',//引入前缀
                ], function ($router) {
            require app_path('Http/routes/admin_routes.php');
        });
    }
    
    

现在我的无法登录后台,即xxx.com/Am/Index/index会发送500错误,并且前台的ajax也无法执行.


项目结构目录:


谢谢大家的帮助,很可惜最后只能给一位大神采纳.情况是这样的,我这里做出说明以备后来的人发生跟我一样的情况.
如果出现跟我一样的情况,请先检查服务器bootstrap/cache目录下是否有缓存文件,有则请清空,在尝试.确实是由于缓存的存在导致的.

PHP中文网PHP中文网2716 天前1992

全部回复(8)我来回复

  • PHPz

    PHPz2017-06-05 11:10:16

    谢谢你得邀请。

    个人觉得linux上部署的错误几点:

    1.大小写敏感。

    2.laravel下的文件夹开发部分是用的软连接。

    3.index.php 在public下,静态资源应该和public对应。

    如果没解决问题,请贴出你得项目结构目录

    回复
    0
  • PHP中文网

    PHP中文网2017-06-05 11:10:16

    谢邀!

    像这样只能一个个排除

    1. 排除文件缓存问题

    2. 目录权限问题,修改该目录权限755

    回复
    0
  • 黄舟

    黄舟2017-06-05 11:10:16

    500可是内部服务器错误,说明你的代码出错了,而不是404,Not found

    回复
    0
  • PHP中文网

    PHP中文网2017-06-05 11:10:16

    php-fpm的配置中用户和组要设定

    vim /etc/php-fpm.d/www.conf

    修改用户组配置

    user = nginx
    group = nginx

    将用户组设置为nginx

    chown -R nginx:nginx /path/to/your/webroot

    laravel的如下目录需要有写权限

    chmod -R 0775 bootstrap
    chmod -R 0775 storage

    针对laravel的vhost配置如下:

        root /www/path/to/public/;
        location / {
            index index.php;
            if (!-e $request_filename) {
                rewrite ^/(.*)$ /index.php/ last;
                break;
            }
        }
    
        # 解析PHP
        location ~ .+\.php($|/) {
            set $script $uri;
            set $path_info "/";
            if ($uri ~ "^(.+\.php)(/.+)") {
                set $script    ;
                set $path_info    ;
            }
    
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php?IF_REWRITE=1;
            include fastcgi_params;
            fastcgi_param PATH_INFO $path_info;
            fastcgi_param SCRIPT_FILENAME $document_root/$script;
            fastcgi_param SCRIPT_NAME $script;
            fastcgi_param HTTP_PROXY "";
        }

    回复
    0
  • 迷茫

    迷茫2017-06-05 11:10:16

    500 错误很简单啦 ~

    500 错误的话, 必定会有提示

    浏览器里面的网络面板不一定能抓取到结果, 你可以 在新便签直接打开 查看提示

    或者 去查看一下这个目录下面的文件, 凡是发生错误都会产生一条日志

    $ cd {项目目录}/storage/logs

    回复
    0
  • 巴扎黑

    巴扎黑2017-06-05 11:10:16

    rewrite不行。。要先判断下文件是否存在再去rewrite

    回复
    0
  • 世界只因有你

    世界只因有你2017-06-05 11:10:16

    最好贴下框架返回的错误

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-05 11:10:16

    谢谢大家的帮助,很可惜最后只能给一位大神采纳.情况是这样的,我这里做出说明以备后来的人发生跟我一样的情况.
    如果出现跟我一样的情况,请先检查服务器bootstrap/cache目录下是否有缓存文件,有则请清空,在尝试.确实是由于缓存的存在导致的.

    回复
    0
  • 取消回复