regex - Nginx 正则表达式
问题描述
我正在尝试进行以下重写:
maindomain.com/country/everythingExceptWork 重定向到国家 url
location ~ ^/france(?:/(?!work))(?:(.*))$ {
return 301 https://www.maindomain.com/fr/france/;
}
maindomain.com/anycountry/works 重定向到单个 url
location ~ ^/(spain|italy|france)/work$ {
return 301 https://www.maindomain.com/en/works/;
}
问题是,当我测试 maindomain.com/country/ 时它可以工作,但是如果我测试它 maindomain.com/country(没有最后一个斜杠),它将使用默认规则,当我更改时,这个问题就开始了:
this: location ~ ^/spain(?:/(.*))?$ {
for this: location ~ ^/spain(?:/(?!work))(?:(.*))$ {
NGINX 会议:
server {
listen 80;
server_name maindomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name maindomain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
#reverse proxy
#Default
location / {
return 301 https://www.maindomain.com;
}
#Work ALL COUNTRIES
location ~ ^/(spain|italy|france)/work$ {
return 301 https://www.maindomain.com/en/works/;
}
#France
location ~ ^/france(?:/(?!work))(?:(.*))$ {
return 301 https://www.maindomain.com/fr/france/;
}
#Spain
location ~ ^/spain(?:/(?!work))(?:(.*))$ {
return 301 https://www.maindomain.com/es/spain/;
}
#Italy
location ~ ^/italy(?:/(?!work))(?:(.*))$ {
return 301 https://www.maindomain.com/en/italy/;
}
}
我在此更改中缺少什么以包括带或不带斜线的国家/地区?
this: location ~ ^/spain(?:/(.*))?$ {
for this: location ~ ^/spain(?:/(?!work))(?:(.*))$ {
提前致谢!
解决方案
正则表达式上的最后一个问题符号location ~ ^/spain(?:/(.*))?$
使第二个斜线和以下所有内容成为可选部分。要保留斜杠可选,您需要将您的正则表达式从
location ~ ^/spain(?:/(?!work))(?:(.*))$ { ... }
至
location ~ ^/spain(?:/(?!work).*)?$ { ... }
要保留第一个捕获组,请使用
location ~ ^/spain(?:/(?!work)(.*))?$ { ... }
推荐阅读
- html - 为什么我的元素之间有空格?
- android - 检测android中图像的所有颜色
- go - Windows 原生回调仅在 64 位平台上返回 32 位结果
- ios - XLPagerTabStrip 中未出现 toast 的 showMessage 函数
- javascript - 在 Angular >=6 模板中传播元素的属性
- polygon - 从 ArcMap 到 Illustrator 创建的冗余多边形
- javascript - 如何将 TradingView 小部件插入脚本标记链接中的反应 js:https://www.tradingview.com/widget/market-overview/
- python - Python 3 中子字符串出现在字符串中的次数,其中一个字符可能不同
- javascript - 单页分页问题中的多个角度材料表
- docker - Kubernetes集群无法启动