在NGINX重写规则中添加连字符



我正试图在URL中的ID和slug之间添加一个连字符[-],我正在使用这样的重写规则:

rewrite  ^/(.*)/(.*)/(.*-)(.*)/$ /index.php?type=item&item_type=$1&primary_cat=$2&id=$3&slug=$4 last;

如果我这样更改"-":

rewrite  ^/(.*)/(.*)/(.*~)(.*)/$ /index.php?type=item&item_type=$1&primary_cat=$2&id=$3&slug=$4 last;

或者这个:

rewrite  ^/(.*)/(.*)/(.*)~(.*)/$ /index.php?type=item&item_type=$1&primary_cat=$2&id=$3&slug=$4 last;

一切都很完美!

但是,我的任何组合都不能使用连字符[-]符号。

我意识到这是因为连字符在REGEX中是一个"技术"符号。但是在这种情况下,我怎么能得到这样的网址:

https://example.com/../../../35-my-long-slug/

其中35是页面ID,而我的长段塞是段塞。我需要在它们之间加一个"-"符号,而不是"+"不是"_"不是"~"。我需要的正是连字符"-"符号!

我正在尝试任何变体,例如:

(.*[-])(.*)
(.*)[-](.*)

等等。

基于您的示例:

https://example.com/../../../35-my-long-slug/

您缺少一个捕获组,应该使ID捕获延迟,以便.*在第一个连字符而不是最后一个连字符处停止捕获。事实上,您应该让所有的.*都变得懒惰,这样它们就不会通过显式捕获/:来越界

rewrite  ^/(.*?)/(.*?)/(.*?)/(.*?)-(.*?)/$ /index.php?type=item&item_type=$1&primary_cat=$2&id=$4&slug=$5 last;

我不确定这会对你的$1$3产生什么影响,但ID应该在$4中,段塞应该在$5

最新更新