With this RewriteRule, the redirection that I want (to my SSL VirtualHost listening on port 443) is working just fine as long as the client uses
http://xenial.localdomain as the URL:
RewriteRule ^/?(.*) https://%{HTTP_HOST}:443/$1 [R=301,L]
However, when the port is specified (
http://xenial.localdomain:80 ), the redirect does not work as expected. I see the following in my logs:
192.168.122.1 - - [06/Mar/2017:18:57:58 +0000] "GET / HTTP/1.1" 301 595 "-" "Links (2.13; Linux 4.8.13-100.fc23.x86_64 x86_64; GNU C 5.3.1; text)"
192.168.122.1 - - [06/Mar/2017:18:57:58 +0000] "GET /https://xenial.localdomain:80:443/ HTTP/1.1" 301 662 "-" "Links (2.13; Linux 4.8.13-100.fc23.x86_64 x86_64; GNU C 5.3.1; text)"
192.168.122.1 - - [06/Mar/2017:18:57:58 +0000] "GET /https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/ HTTP/1.1" 301 798 "-" "Links (2.13; Linux 4.8.13-100.fc23.x86_64 x86_64; GNU C 5.3.1; text)"
192.168.122.1 - - [06/Mar/2017:18:57:58 +0000] "GET /https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/ HTTP/1.1" 301 1070 "-" "Links (2.13; Linux 4.8.13-100.fc23.x86_64 x86_64; GNU C 5.3.1; text)"
192.168.122.1 - - [06/Mar/2017:18:57:58 +0000] "GET /https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/https://xenial.localdomain:80:443/ HTTP/1.1" 301 1614 "-" "Links (2.13; Linux 4.8.13-100.fc23.x86_64 x86_64; GNU C 5.3.1; text)"
As you can see, a '/' is being prepended to the rewritten URL and recursion occurs which eventually causes the URL to become too long and cause an error. Why does specifying the port in the URL cause mod_rewrite to behave differently? Is there a better way for me to do this?