apache2 – Redirection https vers http pour une page donnée

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]