【问题标题】:Nginx regular expressionsNginx 正则表达式
【发布时间】:2021-03-15 14:02:18
【问题描述】:

我正在尝试进行以下重写:

maindomain.com/country/everythingExceptWork 重定向到国家/地区网址

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))(?:(.*))$ {

提前致谢!

【问题讨论】:

    标签: regex nginx url-rewriting


    【解决方案1】:

    location ~ ^/spain(?:/(.*))?$ 正则表达式上的最后一个问题符号使第二个斜杠和后面的所有内容成为可选部分。要保留斜杠可选,您需要将您的正则表达式从

    location ~ ^/spain(?:/(?!work))(?:(.*))$ { ... }
    

    location ~ ^/spain(?:/(?!work).*)?$ { ... }
    

    要保留第一个捕获组,请使用

    location ~ ^/spain(?:/(?!work)(.*))?$ { ... }
    

    【讨论】:

    • 非常感谢 Ivan,它成功了!非常感谢
    猜你喜欢
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多