繁体   English   中英

NGINX 重定向匹配位置

[英]NGINX Redirect match location

我有一个有很多路线的网站(Laravel 5.7)

其中几条路线是

"/insurance-travel-landing"  
"/insurance-travel-anual"

我需要将 WordPress 安装指向

"/insurance-travel" 

我做了一个 NGINX 位置,但我有这个问题:

当我在 URL 中写入"/insurance-travel"时可以正常工作,但是当我写入/insurance-travel-landing/insurance-travel-anual我收到 WordPress 的 404 错误。

我尝试使用精确匹配(“location = /insurance-travel”)进行位置处理,但是我的 php 位置有问题。

我的 Nginx 配置(适用于保险旅行,但其他不起作用)

location = /insurance-travel {
             alias /var/www/html/landing-travel;
             index index.php;
             if (!-e $request_filename) { rewrite   /insurance-travel/index.php last; }
                    location ~ \.php$ {
                    if (!-f $request_filename) { return 404; }
                    fastcgi_pass unix:/run/php/php7.1-fpm.sock;

                    include /etc/nginx/fastcgi_params;
                    fastcgi_param  SCRIPT_FILENAME $request_filename;
              }


    }

当我把 = 放在位置时我的配置

location = /insurance-travel {
             alias /var/www/html/landing-travel;
             index index.php;
             if (!-e $request_filename) { rewrite   /insurance-travel/index.php last; }
                    location ~ \.php$ {
                    if (!-f $request_filename) { return 404; }
                    fastcgi_pass unix:/run/php/php7.1-fpm.sock;

                    include /etc/nginx/fastcgi_params;
                    fastcgi_param  SCRIPT_FILENAME $request_filename;
              }


    }

Nginx 告诉我这个

nginx: [emerg] location "\.php$" cannot be inside the exact location "/insurance-travel".

我怎样才能解决这个问题?

谢谢!

编辑:

服务器块

server {
server_name xx.xx.xx;
listen 443 ssl http2;

ssl_certificate /etc/letsencrypt/live/xx/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xx/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/xx/fullchain.pem;
include /etc/nginx/snippets/ssl.conf;

root "/var/www/html/xx/current/public";
index index.php index.html;
location / { 
     try_files $uri $uri/ /index.php?$query_string;
}
location  /insurance-travel{
             alias /var/www/html/landing-travel;
             index index.php;
             if (!-e $request_filename) { rewrite   /insurance-travel/index.php last; }
             location ~ \.php$ {
                if (!-f $request_filename) { return 404; }
                fastcgi_pass unix:/run/php/php7.1-fpm.sock;

                include /etc/nginx/fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME $request_filename;
          }

    }
sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
           fastcgi_index index.php;
           include fastcgi_params;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           fastcgi_intercept_errors off;
           fastcgi_buffer_size 16k;
           fastcgi_buffers 4 16k;
           fastcgi_connect_timeout 300;
       fastcgi_send_timeout 300;
               fastcgi_read_timeout 300;
    }

 }

所以你想让/insurance-travel访问 WordPress,但/insurance-travel-xxx继续被 Laravel 处理。

您可以设置一个位置,以便任何以/insurance-travel/开头的 URI 都由 WordPress 处理,并添加一个显式规则,即单个 URI /insurance-travel

例如:

location = /insurance-travel {
    rewrite ^ /insurance-travel/ last;
}
location ^~ /insurance-travel/ {
    alias /var/www/html/landing-travel/;
    index index.php;
    if (!-e $request_filename) { rewrite ^ /insurance-travel/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }
        fastcgi_pass unix:/run/php/php7.1-fpm.sock;

        include /etc/nginx/fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM