[英]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.