Sztuką dostarczone przez Jona jest ładny hack, ale obawiam się, to może pęknąć, jeśli chcesz używać więcej [OR]
warunki, a jeśli używasz więcej odwołania wstecznego trzeba być ostrożnym, który numer użyć (%1
lub %2
lub ..).
Myślę, że najbardziej eleganckie, wytrzymałe i czyste rozwiązanie dla smart HTTP/HTTPS handling jest ustawienie zmiennej:
# initialization code - put only once at the beginning of .htaccess
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=proto:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=proto:http]
# simply use %{ENV:proto} in your rules:
RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
RewriteRule^ %{ENV:proto}://sub.domain.com:2368%{REQUEST_URI} [P,QSA,L]
Zaletą jest również, że kod inicjujący musi być uruchomiony tylko raz, więc jeśli masz więcej przepisać zasady, a wynikowy kod jest znacznie krótszy i bardziej elegancki.
Uwaga: często stosowana konfiguracja to https z chmurą chmurową, w którym to przypadku protokół HTTPS nie jest włączony na samym serwerze. W tym przypadku potrzebne są dodatkowe zasady jak (kolejność uwaga):
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=proto:http]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=proto:https]
Tylko mały komentarz. To nie jest przekierowanie, rozwiązuje to serwer działający jako proxy (flaga P). Aby wykonać rzeczywiste przekierowanie i poprosić klienta o przejście do innego adresu URL, należy użyć flagi R zamiast P. – Ludecan