Laravel in nginx -Подстановка результата в 404 - PullRequest
0 голосов
/ 11 марта 2020

Я хотел бы добавить Laravel -экземпляр к существующему веб-сайту.

На основании URL-адреса основной веб-сайт или Laravel -экземпляр должен принять запрос. Структура URL выглядит следующим образом:

Основное приложение (например)

Laravel блог внутри страницы (например)

, а также магазин (напр.):

Поэтому я решил добавить 2 местоположения в существующий сайт

  • местоположение ^ ~ / shop {alias ...}
  • location ^ ~ / blog {alias ...}

Однако, когда запрос передается на Laravel, первая часть URI отсутствует, поскольку nginx не будет пересылать его после сопоставления. Таким образом, для блога местоположения URI становится / post вместо / blog / post , а для магазина местоположений URL становится / {itemname} вместо / shop / {itemname} . Это приводит к 404s для каждой страницы, так как Laravel не может найти их по маршруту.

Как я могу сказать nginx для пересылки полного URI, включая соответствующее местоположение -name?

Вот моя текущая nginx конфигурация:

    server {
        listen 80 default_server;

        server_name mypage.com;

        return 301 https://www.mypage.com$request_uri;
    }

    server {
        listen 443;

        server_name mypage.com;

        ssl_certificate        /etc/letsencrypt/live/www.mypage.com/fullchain.pem;
        ssl_certificate_key    /etc/letsencrypt/live/www.mypage.com/privkey.pem;


        return 301 https://www.mypage.com$request_uri;
    }


    # Default server configuration
    server {
        listen 443 ssl http2 default_server;

        server_name www.mypage.com;

        ssl_certificate        /etc/letsencrypt/live/www.mypage.com/fullchain.pem;
        ssl_certificate_key    /etc/letsencrypt/live/www.mypage.com/privkey.pem;

        # add Strict-Transport-Security to prevent man in the middle attacks
        add_header Strict-Transport-Security "max-age=31536000"; 

        root        /var/www/Domains/mypage.com/_www/web;
        error_log   /var/www/Domains/mypage.com/_www/log/error.log;

        # remove tailing slash (as backend won't work otherwise)
        rewrite ^/(.*)/$ /$1 permanent;

        # Media: images, icons, video, audio
        location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$ {
            expires 1M;
            gzip_static on;
            access_log off;
            add_header Cache-Control "public";
        }

        # CSS and Javascript
        location ~* \.(?:css|js)$ {
            expires 1M;
            gzip_static on;
            access_log off;
            add_header Cache-Control "public";
        }


        # strip app.php/ prefix if it is present
        rewrite ^/index\.php/?(.*)$ /$1 permanent;

        location / {
            try_files $uri @rewriteapp;
        }

        ## LARAVEL SUBSYSTEM ==>
        # Blog
        location ^~ /blog {
            alias /var/www/Domains/mypage.com/laravel/public;

            index index.php;

            try_files $uri $uri/ @blog;

            access_log /var/www/Domains/mypage.com/livesystem/storage/logs/access.log;
            error_log  /var/www/Domains/mypage.com/livesystem/storage/logs/error.log;

            location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                fastcgi_param SCRIPT_FILENAME $request_filename;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
            }
        }

        location @blog {
            rewrite /blog/(.*)$ /index.php?/blog/$1 last;
        }

        # Shop
        location ^~ /shop {
            alias /var/www/Domains/mypage.com/laravel/public;

            index index.php;

            try_files $uri $uri/ @shop;

            access_log /var/www/Domains/mypage.com/livesystem/storage/logs/access.log;
            error_log  /var/www/Domains/mypage.com/livesystem/storage/logs/error.log;

            location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                fastcgi_param SCRIPT_FILENAME $request_filename;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
            }
        }

        location @shop {
            rewrite /shop/(.*)$ /index.php?/shop/$1 last;
        }
        ## <== /LARAVEL SUBSYSTEM

        location @rewriteapp {
            rewrite ^(.*)$ /index.php/$1 last;
        }

        # pass the PHP scripts to FastCGI server from upstream phpfcgi
        location ~ ^/(index|backend)\.php(/|$) {
            include snippets/fastcgi-php.conf;

            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

            # With php-fpm (or other unix sockets):
            fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        }
    }
...