recherche

Maison  >  Questions et réponses  >  le corps du texte

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

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中文网2732 Il y a quelques jours2014

répondre à tous(8)je répondrai

  • PHPz

    PHPz2017-06-05 11:10:16

    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

    répondre
    0
  • PHP中文网

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

    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

    répondre
    0
  • 黄舟

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

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

    répondre
    0
  • PHP中文网

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

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

    répondre
    0
  • 迷茫

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

    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

    répondre
    0
  • 巴扎黑

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

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

    répondre
    0
  • 世界只因有你

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

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

    répondre
    0
  • 伊谢尔伦

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

    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.
    .

    répondre
    0
  • Annulerrépondre