我目前有一些简单的规则来更改某些已更改的链接的URL路径。但是我需要在' $ 1'
上进行查找和替换是否可能
我尽可能地在下面概述了它......
//当前规则
location ~ ^/simpsons-mirrors/(.*) {
return 301 /simpsons-london/$1;
}
location ~ ^/simpsons-mirrors(.*) {
return 301 /simpsons-london;
}
需要这样做:
/simpsons-mirrors/simpson-morrors-something-else-whatever-blah
to
/simpsons-london/simpsons-london-something-else-whatever-blah
答案 0 :(得分:0)
您可以使用regular expression back-reference找到以前的捕获。反向引用包括反斜杠后跟捕获的编号,例如:
rewrite ^/(simpsons-mirrors)/\1(.*)$ /simpsons-london/simpsons-london$2 permanent;
第一次捕获包含搜索文本,然后第二次匹配。第二个捕获包含附加到目标的URI的其余部分。
您可以使用map
directive创建一般解决方案。
例如:
map $request_uri $to_text {
default 0;
~*^/simpsons-mirrors(/|$) simpsons-london;
}
server {
...
if ($to_text) {
rewrite ^/([^/]+)/\1(.*)$ /$to_text/$to_text$2 redirect;
rewrite ^/([^/]+)$ /$to_text redirect;
}
在上述情况下,搜索文本只是第一对/
之间的文本,但替换文本是从地图中获取的。
第二个rewrite
处理你问题中的第二个案例。