Фунт: перенаправить http на https для подстановочных доменов
У меня есть сервер (Debian Jessie), управляющий несколькими доменами с помощью лака и apache, и я хочу использовать фунт для перенаправления http-трафика на https.
Поскольку директива HeadRequire разрешает регулярное выражение, я пытаюсь использовать регулярное выражение в Redirect:
ListenHTTP
Address 1.2.3.4
Port 80
## allow PUT and DELETE also (by default only GET, POST and HEAD)
xHTTP 0
RewriteLocation 0
Service "myHost"
HeadRequire "^Host: (.+)\.myserver\.net"
Redirect 301 "http://\1.myserver.net"
End
End
но, к сожалению, я получаю ERR_INVALID_REDIRECT
Есть ли способ позволить фунту сделать перенаправление с подстановочными знаками?
Скручиваемость вывода:
$ curl -v http://prova.myserver.net:80/
* Hostname was NOT found in DNS cache
* Trying 1.2.3.4...
* Connected to prova.myserver.net (1.2.3.4) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.38.0
> Host: prova.myserver.net:80
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 301 Moved Permanently
< Location: http://%5c1.myserver.net/
< Content-Type: text/html
< Content-Length: 148
<
* Closing connection 0
<html><head><title>Redirect</title></head><body><h1>Redirect</h1><p>You should go to <a href="http://%5c1.myserver.net/">here</a></p></body></html>
1 ответ
Короче говоря: не возможно.
Основываясь на документации фунта, директива Redirect не допускает никаких шаблонов (или регулярных выражений). И это также логически вытекает из того факта, что для каждой службы может быть много директив HeadRequire (все они должны быть выполнены, чтобы Redirect работал), поэтому, если вы использовали две директивы HeadRequire с разными регулярными выражениями, у Redirect нет возможности угадать, какие из них есть обратная ссылка, которую вы хотите.
Вы также спрашивали о перенаправлении на https, но ваш пример перенаправляет на http. Вы, вероятно, пропустили "s", как в:
ListenHTTP
Address 1.2.3.4
Port 80
Service
HeadRequire "Host:.*some1.myserver.net.*"
Redirect "https://some1.myserver.net"
End
Service
HeadRequire "Host:.*some2.myserver.net.*"
Redirect "https://some2.myserver.net"
End
End
ListenHTTPS
Address 1.2.3.4
Port 443
# first domain
Cert "/etc/pki/tls/letsencrypt_pound/pound_some1.pem"
# second domain
Cert "/etc/pki/tls/letsencrypt_pound/pound_some2.pem"
Disable SSLv3
End