NGINX重定向匹配位置



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

其中有几条路线是

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

我需要指向的WordPress安装

"/insurance-travel" 

我使用了NGINX定位,但我有这个问题:

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

我试着做了一个完全匹配的位置("位置=/保险旅行"(但我对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;
}
}

最新更新