Regex 更改nginx重写正则表达式条件

Regex 更改nginx重写正则表达式条件,regex,nginx,rewrite,Regex,Nginx,Rewrite,我的重写规则当前为: rewrite ^/answer/1/(www\.)*(.)(.+)$ /answer/1/$2.html last; 因此,提出了以下要求: mydomain.co.uk/answer/1/aa mydomain.co.uk/answer/1/www.aa mydomain.co.uk/answer/1/www.aa/ mydomain.co.uk/answer/1/www.aa/something mydomain.co.uk/answer/1/www.aa/some

我的重写规则当前为:

rewrite ^/answer/1/(www\.)*(.)(.+)$ /answer/1/$2.html last;
因此,提出了以下要求:

mydomain.co.uk/answer/1/aa
mydomain.co.uk/answer/1/www.aa
mydomain.co.uk/answer/1/www.aa/
mydomain.co.uk/answer/1/www.aa/something
mydomain.co.uk/answer/1/www.aa/something/even-deeper/and-so-on
mydomain.co.uk/answer/1/aa
mydomain.co.uk/answer/1/www.aa
mydomain.co.uk/answer/1/www.aa/
提供以下文件:

mydomain.co.uk/answer/1/a.html
mydomain.co.uk/answer/1/a.html
mydomain.co.uk/answer/1/new.html
现在,我希望拆分响应,以便请求,例如:

mydomain.co.uk/answer/1/aa
mydomain.co.uk/answer/1/www.aa
mydomain.co.uk/answer/1/www.aa/
mydomain.co.uk/answer/1/www.aa/something
mydomain.co.uk/answer/1/www.aa/something/even-deeper/and-so-on
mydomain.co.uk/answer/1/aa
mydomain.co.uk/answer/1/www.aa
mydomain.co.uk/answer/1/www.aa/
将提供以前的文件:

mydomain.co.uk/answer/1/a.html
mydomain.co.uk/answer/1/a.html
mydomain.co.uk/answer/1/new.html
但进一步的请求,如:

mydomain.co.uk/answer/1/www.aa/something
mydomain.co.uk/answer/1/www.aa/something/even-deeper/and-so-on
将提供新的文件:

mydomain.co.uk/answer/1/a.html
mydomain.co.uk/answer/1/a.html
mydomain.co.uk/answer/1/new.html

我应该如何更改上述正则表达式条件以适应要求

我不在家,所以我现在无法测试它,但类似的东西应该可以工作:

rewrite ^/answer/1/(www\.)*(.)(.+)/(.+)$ /answer/1/new.html break;
rewrite ^/answer/1/(www\.)*(.)(.+)$ /answer/1/$2.html last;
让我解释一下:正如nginx文档()

因此,如果一个请求匹配第一个重写规则(类似于您的重写,但以
/(.+)
指令结束)。这意味着该请求将匹配已匹配的每个请求,但只有当且仅当斜杠后面有一个或多个字符时才匹配。注意这一点,因为这意味着以下url:

mydomain.co.uk/answer/1/www.aa// (yes this is a valid url)
将重定向到:

mydomain.co.uk/answer/1/new.html
如果您不想要这种行为,可以按如下方式修改正则表达式:

rewrite ^/answer/1/(www\.)*(.)(.+)/(([^/]+/?)+)$ /answer/1/new.html break;
这里的
(([^/]+/?)+)
指令说:所有不是a/重复一次或多次,后面可能是或不是a/的东西。所有这些都重复了一次或多次

我重复一遍,我现在无法测试它,但它应该能像您预期的那样工作。请记住,这里是重写url的顺序,因为我首先测试的是应该重写到
mydomain.co.uk/answer/1/new.html的url,然后是您的旧重写,它仍然会与url匹配,但不会被nginx处理,因为
中断上一条规则的关键字


编辑:我混淆了
last
break
:)

有效,但需要将break改为last(这样两个都有last)谢谢!