Использование 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 }