我正试图在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
中