Nginx Regex и необязательная обратная ссылка

Я хочу опционально сопоставить строку (asdf) и удалить ее из перезаписи.

location ~ /somefolder {
    rewrite ^/somefolder(.*)(?:asdf)?(.*html)$ http://example.com$1$2 permanent;
}

Так что это перезапишет запрошенный URL в корневой домен, а также лишит URL любого вхождения asdf если представить.

Под адресом mydomain.com/somefolder/pencil.html переписан mydomain.com/pencil.html

2013/09/16 09:52:24 [notice] 16866#0: *1 "^/somefolder(.*)(?:asdf)?(.*html)$" matches "/somefolder/pencil.html", client: 10.0.0.2, server: mydomain.com, request: "GET /somefolder/pencil.html HTTP/1.1", host: "mydomain.com"
2013/09/16 09:52:24 [notice] 16866#0: *1 rewritten redirect: "http://mydomain.com/pencil.html", client: 10.0.0.2, server: mydomain.com, request: "GET /somefolder/pencil.html HTTP/1.1", host: "mydomain.com"

Где как тут mydomain.com/somefolder/pencil-asdf.html переписан mydomain.com/pencil-asdf.html

2013/09/16 09:52:31 [notice] 16866#0: *1 "^/somefolder(.*)(?:asdf)?(.*html)$" matches "/somefolder/pencil-asdf.html", client: 10.0.0.2, server: mydomain.com, request: "GET /somefolder/pencil-asdf.html HTTP/1.1", host: "mydomain.com"
2013/09/16 09:52:31 [notice] 16866#0: *1 rewritten redirect: "http://mydomain.com/pencil-asdf.html", client: 10.0.0.2, server: mydomain.com, request: "GET /somefolder/pencil-asdf.html HTTP/1.1", host: "mydomain.com"

не должны asdf быть раздетым, используя (?:asdf) уступки mydomain.com/pencil-.html

1 ответ

Решение

Я разработал решение, так что я просто использую обратные ссылки $1 и $3, игнорируя $2, независимо от того, совпадает он или равен нулю.

rewrite ^/somefolder(.*)(asdf)(.*html)$ http://example.com$1$3 permanent;
Другие вопросы по тегам