Heim  >  Fragen und Antworten  >  Hauptteil

php – Laravel wird unter Linux bereitgestellt und gibt den öffentlichen Ordner als Website-Stammverzeichnis an, aber auf seine Unterordner kann nicht zugegriffen werden

Diese Maschine verwendet eine Fensterumgebung, alles ist normal, aber bei der Bereitstellung auf einem Linux-System (ausgestattet mit Nginx) können der Controller und die Methoden beim Zugriff normal ausgeführt werden und die Seite kann auch ausgegeben werden, die Ausgabeseite jedoch CSS-Datei fehlt, ich habe einen 500-Fehler gefunden. Die Anfrage wurde in den öffentlichen Ordner umgeleitet

public/web/css/css.css

Der Domainname lautet:

aaa.com 

Durch den direkten Zugriff auf aaa.com wird Public/index.php ausgeführt (da Nginx so eingerichtet ist, dass die Anforderung an den öffentlichen Ordner umgeleitet wird), und die Seite kann auch normal ausgegeben werden, aber die angeforderte Seite:

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

Aber es sind 500 Fehler. Bitte gebt mir einen Rat.

Jetzt habe ich herausgefunden, dass ein Teil des Problems ein Nginx-Konfigurationsproblem ist. Ich habe die Einstellungen online kopiert:
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)(/.+)$;
        }

   }

Obwohl Sie jetzt auf die Homepage zugreifen können, gibt es ein weiteres Problem. Auf das Frontend kann zugegriffen werden, aber auf das Backend kann nicht zugegriffen werden . Ich verwende RouteProvider. Die Kartenmethode in .php konfiguriert zwei Routing-Dateien:

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

Jetzt kann ich mich nicht beim Backend anmelden, das heißt, xxx.com/Am/Index/index sendet einen 500-Fehler und der Ajax im Frontend kann nicht ausgeführt werden.

Projektstrukturverzeichnis:

Vielen Dank an alle für Ihre Hilfe. Die Situation ist am Ende nur so, und ich werde es hier erklären, falls jemand anderes die gleiche Situation hat wie ich Wenn die gleiche Situation wie bei mir auftritt, prüfen Sie bitte zunächst, ob sich Cache-Dateien im Bootstrap-/Cache-Verzeichnis des Servers befinden. Wenn ja, löschen Sie diese bitte und versuchen Sie es erneut
PHP中文网PHP中文网2716 Tage vor2000

Antworte allen(8)Ich werde antworten

  • PHPz

    PHPz2017-06-05 11:10:16

    谢谢你得邀请。

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

    1.大小写敏感。

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

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

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

    Antwort
    0
  • PHP中文网

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

    谢邀!

    像这样只能一个个排除

    1. 排除文件缓存问题

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

    Antwort
    0
  • 黄舟

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

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

    Antwort
    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/$1 last;
                break;
            }
        }
    
        # 解析PHP
        location ~ .+\.php($|/) {
            set $script $uri;
            set $path_info "/";
            if ($uri ~ "^(.+\.php)(/.+)") {
                set $script    $1;
                set $path_info    $2;
            }
    
            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 "";
        }

    Antwort
    0
  • 迷茫

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

    500 错误很简单啦 ~

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

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

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

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

    Antwort
    0
  • 巴扎黑

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

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

    Antwort
    0
  • 世界只因有你

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

    最好贴下框架返回的错误

    Antwort
    0
  • 伊谢尔伦

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

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

    Antwort
    0
  • StornierenAntwort