php – Laravel wird unter Linux bereitgestellt und gibt den öffentlichen Ordner als Website-Stammverzeichnis an, aber auf seine Unterordner kann nicht zugegriffen werden
PHP中文网
PHP中文网 2017-06-05 11:08:16
0
8
2038

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中文网

认证高级PHP讲师

Antworte allen(8)
PHPzhong

谢谢你得邀请。

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

1.大小写敏感。

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

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

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

Ty80

谢邀!

像这样只能一个个排除

  1. 排除文件缓存问题

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

黄舟

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

洪涛

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 "";
    }
迷茫

500 错误很简单啦 ~

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

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

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

$ cd {项目目录}/storage/logs
巴扎黑

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

世界只因有你

最好贴下框架返回的错误

伊谢尔伦

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage