Назад | Перейти на главную страницу

Перенаправление URL-адреса Haproxy 301 при условии строки запроса

Использование Haproxy 1.5.12 в Ubuntu 12.04

На мой сайт поступает много таких запросов:

http://www.example.com/foo/bar/mypage.php?gallery=&position=3

правильный URL-адрес должен быть:

http://www.example.com/foo/bar/mypage.php?gallery=photogallery&position=3

Мне удалось переписать запросы на правильный URL, но я также хотел бы сделать 301 редирект клиентам.

После этого сообщения: перенаправить перезаписанный URL с помощью haproxy Я попытался:

acl fix_gallery url_sub gallery=&
reqrep (.*)gallery=&(.*) \1gallery=photogallery&\2
redirect prefix / code 301 if fix_gallery

Пытаясь проявить творческий подход, я пробовал:

acl fix_gallery url_reg (.*)gallery=&(.*)
acl fix_gallery urlp_reg(gallery) -m str ""
acl fix_gallery urlp_reg(gallery) -m len 0

и многое другое. Но вроде ничего не работает, так что я явно чего-то упускаю.

Какие-либо предложения?

Спасибо

Вы можете добиться того, что ищете, используя 3 строки конфигурации, которые используют http-request ключевое слово.

Первый устанавливает фиктивный заголовок, который мы будем использовать в следующих двух.

http-request set-header X-Location-Path %[capture.req.uri] if fix_gallery

Второй выполняет замену, необходимую для исправления URL-запроса.

http-request replace-header X-Location-Path (.*)gallery=&(.*) \1gallery=photogallery&\2 if fix_gallery

Последняя строка указывает направление на измененный URL.

http-request redirect location http://www.example.com/%[hdr(X-Location-Path)] if fix_gallery

Это работает, если у вас есть только один домен, но можно построить http-request redirect линии, которые будут работать с любым доменом и схемой.

http-request redirect location https://%[hdr(host)]/%[hdr(X-Location-Path)] if fix_gallery { ssl_fc }
http-request redirect location http://%[hdr(host)]/%[hdr(X-Location-Path)] if fix_gallery !{ ssl_fc }