Préserver HTTP/HTTPS, protocole .htaccess redirige
Je dois rediriger le port 80 pour 2368 dans le htaccess mais j'aimerais garder le protocole demandé intacts, de sorte que le protocole SSL ne rompt pas.
J'ai actuellement ceci:
RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
RewriteRule ^ http://sub.domain.com:2368%{REQUEST_URI} [P,QSA,L]
qui fonctionne correctement mais j'aimerais le protocole à l' %{HTTP_HOST} condition si possible.
Est-il un moyen d'obtenir cette à être plus dynamique, sans codage en dur des domaines et des protocoles?
Il semble très lent comme c'est.
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter une condition du type:
Qui vérifie que le HTTPS est coupé ou s'il est sur et vous pouvez utiliser une référence arrière pour aller chercher le "s" de caractère:
Donc si HTTPS est éteint,
%1
est vide et le protocole esthttp://
. Si HTTPS est activé, alors le "s" est le regroupement et la%1
backreference est un "s", ainsi, le protocole esthttps://
.Cependant, c'est tout en supposant que le port 2368 peut gérer les deux chiffré SSL/TLS.
L'astuce fournie par Jon est un hack sympa, mais j'ai peur qu'il risque de se briser si vous souhaitez utiliser plus
[OR]
conditions, et si vous utilisez plus des références arrières vous devez être prudent et utiliser le numéro (%1
ou%2
ou ..).Je pense que le plus élégant, robuste et propre solution pour smart HTTP/HTTPS de manutention est de définir une variable:
L'avantage aussi c'est que le code d'initialisation doit être exécuté qu'une seule fois, donc si vous avez plus de règles de réécriture, puis le code résultant est beaucoup plus court et plus élégant.
Note une installation commune est https fourni avec cloudflare, auquel cas le HTTPS n'est pas " on " sur le serveur lui-même. Dans ce cas, vous avez besoin de plus de règles (remarque):
%{ENV:HTTPS}
mais à part ça, super! Pour le débogage, vous pouvez simplement ajouter#%{HTTPS}-%{ENV:HTTPS}-%{ENV:proto}
à la cible de redirection et de voir où il va.^(.*)$
) est excessive et doit être supprimé, car il n'est pas effectivement utilisé par la suite, à la place du tiret (-) est utilisé pour tout simplement passer à travers. Ainsi, par exemple, tous vous avez besoin estRewriteRule . - [env=...]
ou similaire.De départ avec Apache 2.4 vous pouvez également utiliser la variable
%{REQUEST_SCHEME}
de préserver le régime:Pas besoin de se mêler à toutes les conditions de cette façon.
Ou, vous pouvez utiliser la solution posté une réponse par Jon Lin et de le réécrire un
RewriteCond
et ensuite définir une variable comme suggéré dans la réponse TMS.Qui ressemblerait à ceci:
Ou, si vous préférez:
la redirection http vers https:
Non www www redirection:
Si vous souhaitez utiliser à la fois la fonctionnalité, puis placez les deux morceaux de code ci-dessus
de façon appropriée.