J’ai un problème spécifique concernant la redirection de HTTPS vers HTTP pour plusieurs pages.
J’ai Apache2 devant Zope.
Voici la configuration de mon VirtualHost sur le port 80:
ServerAdmin [email protected] ServerName website.com ServerAlias www.website.com RewriteEngine On # www to non www RewriteCond %{HTTP_HOST} ^www.(.*) [NC] RewriteRule ^/(.*) http://website.com/$1 [R=301,L] # HTTP TO HTTPS RewriteCond %{HTTPS} off RewriteRule ^/(.*) https://%{HTTP_HOST}%{REQUEST_URI}
Après, comme Zope écoute le port SSL 8443, j’applique la règle iptables suivante:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
Donc, ma règle de réécriture redirige 80 vers 443 et les redirections iptables 443 vers 8443.
Dans ce contexte, comment pourrais-je redirect une page (disons ” https://website.com/wiki/test_page.html “) vers ” http://website.com/wiki/test_page.html “.
J’ai essayé d’append la règle suivante:
# if https on then turn off RewriteCond %{HTTPS} on RewriteRule ^/wiki/test_page.html http://%{HTTP_HOST}%{REQUEST_URI}
mais ça ne marche pas.
Au lieu de faire une autre règle de réécriture, je pense qu’il devrait être plus facile d’empêcher, pour la page “/wiki/test_page.html”, la redirection HTTPS, mais je ne sais pas comment y parvenir.
Tout conseil est le bienvenu,
Merci
MISE À JOUR 1:
J’ai essayé :
# HTTP TO HTTPS except page "/wiki/test_page.html" RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/wiki/test_page.html RewriteRule ^/(.*) https://%{HTTP_HOST}%{REQUEST_URI}
sans succès
MISE À JOUR 2:
J’ai progressé dans mon dossier. Ma solution temporaire est d’appliquer:
RewriteEngine On # www to non www and HTTP to HTTPS redirection for all website RewriteCond %{REQUEST_URI} ^/www\. [NC,OR] RewriteCond %{REQUEST_URI} !^/wiki/test_page\.html [NC] RewriteRule ^/(.*) https://website.com/$1 [R=301,L] # rewrite HTTPS to HTTP for test_page.html #RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} ^/wiki/test_page\.html [NC] RewriteRule ^/(.*) http://localhost:9674/++vh++http:%{SERVER_NAME}:80/++/$1 [P,L]
Avec ces règles, je peux parcourir tout mon site Web avec des liens HTTPS, à l’exception de la page /wiki/test_page.html. Pour cela, je mets, dans la page contenant le lien ” /wiki/test_page.html
“, un lien HTTP explicite:
Test page
de cette façon, la dernière règle de réécriture est appliquée ( RewriteRule ^/(.*) http://localhost:9674/++vh++http:%{SERVER_NAME}:80/++/$1 [P,L]
) et la demande sur le port 80 est transmise au port HTTP 9674 de Zope3.
Dans le RewriteCond
suivant, je vous ai fait remarquer que RewriteCond %{HTTPS} on
ne correspond pas lorsque je navigue sur mon site Web HTTPS.
# rewrite HTTPS to HTTP for test_page.html RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} ^/wiki/test_page\.html [NC] RewriteRule ^/(.*) http://localhost:9674/++vh++http:%{SERVER_NAME}:80/++/$1 [P,L]
Est-ce parce que Apache2 ne peut pas détecter le port HTTPS de Zope3 (8443 ou 443)?
Maintenant, je voudrais transférer directement la requête HTTPS sur /wiki/test_page.html
à la requête HTTP sur le serveur Zope3 (qui est sur le port 9674). Je pense que la solution pourrait provenir de la modification de cette règle de réécriture:
RewriteRule ^/(.*) http://localhost:9674/++vh++http:%{SERVER_NAME}:80/++/$1 [P,L]
J’ai essayé par exemple de le modifier comme suit:
RewriteRule ^/(.*) http://localhost:9674/++vh++https:%{SERVER_NAME}:443/++/$1 [P,L]`
ou
RewriteRule ^/(.*) http://localhost:9674/++vh++https:%{SERVER_NAME}:8443/++/$1 [P,L]
Malheureusement, cela ne fonctionne pas: par exemple, si je clique sur le lien ” https://website.com/wiki/test_page.html ” depuis la page contenant ce lien, l’URL n’est pas réécrite pour les deux versions ci-dessus.
Toute aide est la bienvenue
Eh bien, les règles me conviennent parfaitement dans votre fichier vhost. Assurez-vous d’avoir redémarré apache après chaque modification et effacez également votre cache car les redirections 301 sont mises en cache par le navigateur. Vous pouvez également combiner vos règles en 1 comme ci-dessous. Cela devrait fonctionner.
# www to non www and http to https RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC, OR] RewriteCond %{REQUEST_URI} !^/wiki/test_page.html [NC] RewriteRule ^/?(.*) https://website.com/$1 [R=301,L]