php - laravel déployé sur Linux, spécifiant le dossier public comme répertoire racine du site Web, mais ses sous-dossiers ne sont pas accessibles
PHP中文网
PHP中文网 2017-06-05 11:08:16
0
8
2021

Cette machine utilise un environnement de fenêtre, tout est normal, mais lorsqu'elle est déployée sur un système Linux (équipé de nginx), lorsqu'on y accède, le contrôleur et les méthodes peuvent être exécutés normalement, et la page peut également être sortie, mais la page de sortie est fichier css manquant, j'ai vérifié et trouvé une erreur 500. La demande a été redirigée vers le dossier public :
.

public/web/css/css.css

Le nom de domaine est :

aaa.com 

L'accès direct à aaa.com exécutera Public/index.php (car nginx est configuré pour rediriger la demande vers le dossier public), et la page peut également être affichée normalement, mais la page demandée :

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

Mais il s’agit de 500 erreurs, je n’arrive pas à comprendre. Merci de me donner quelques conseils.

.


Maintenant, j'ai découvert qu'une partie du problème venait d'un problème de configuration nginx, j'ai copié les paramètres en ligne :

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)(/.+)$;
        }

   }

Bien que vous puissiez accéder à la page d'accueil maintenant, il y a un autre problème maintenant. Mon projet a un frontend et un backend accessibles, mais le backend n'est pas accessible. C'est ainsi que j'implémente le frontend et le backend. . J'utilise RouteProvider. La méthode map dans .php configure deux fichiers de routage :

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

Maintenant, je ne peux pas me connecter au backend, c'est-à-dire que xxx.com/Am/Index/index enverra une erreur 500 et l'ajax dans le frontend ne pourra pas être exécuté.


Répertoire de la structure du projet :


Merci à tous pour votre aide. C'est dommage qu'elle ne puisse finalement être adoptée que par un grand dieu. La situation est comme ça, et je l'expliquerai ici au cas où quelqu'un d'autre aurait la même situation que moi. Si la même situation que moi se produit, veuillez d'abord vérifier s'il y a des fichiers de cache dans le répertoire bootstrap/cache du serveur. S'il y en a, veuillez les effacer et réessayer. Cela est effectivement dû à l'existence du cache.

.

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(8)
PHPzhong

Merci pour l'invitation.

Je pense personnellement qu'il y a quelques erreurs dans le déploiement sous Linux :

1. Sensible à la casse.

2. La partie développement du dossier sous Laravel utilise des liens symboliques.

3.index.php Sous public, les ressources statiques doivent correspondre à public.

Si le problème n'est pas résolu, veuillez publier le répertoire de la structure de votre projet

Ty80

Merci pour l'invitation !

Vous ne pouvez les exclure qu'un par un comme ceci

  1. Résoudre les problèmes de cache de fichiers

  2. Problème d'autorisation du répertoire, modifiez les autorisations du répertoire en 755

黄舟

500 est une erreur interne du serveur, indiquant qu'il y a une erreur dans votre code, pas 404, Not found

洪涛

Les utilisateurs et les groupes doivent être définis dans la configuration de php-fpm

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

Modifier la configuration du groupe d'utilisateurs

user = nginx
group = nginx

Définir le groupe d'utilisateurs sur nginx

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

Les répertoires suivants de Laravel nécessitent une autorisation en écriture

chmod -R 0775 bootstrap
chmod -R 0775 storage

La configuration vhost pour laravel est la suivante :

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

500 L'erreur est très simple ~

500 S'il y a une erreur, il y aura certainement une invite

Le panneau réseau du navigateur ne pourra peut-être pas capturer les résultats. Vous pouvez l'ouvrir directement dans une nouvelle note pour afficher les astuces

.

Ou vérifiez les fichiers sous ce répertoire Chaque fois qu'une erreur se produit, un journal sera généré

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

la réécriture ne fonctionne pas. . Vous devez d'abord déterminer si le fichier existe avant de le réécrire

世界只因有你

Il est préférable de publier l'erreur renvoyée par le framework

伊谢尔伦

Merci à tous pour votre aide. C'est dommage qu'elle ne puisse finalement être adoptée que par un grand dieu. La situation est comme ça, et je l'expliquerai ici au cas où quelqu'un d'autre aurait la même situation que moi. Si la même situation que moi se produit, veuillez d'abord vérifier s'il y a des fichiers de cache dans le répertoire bootstrap/cache du serveur. S'il y en a, veuillez les effacer et réessayer. Cela est effectivement dû à l'existence du cache.
.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal