J'essaie de réécrire 3 sections d'un site wordpress en https si elles sont accessibles via http:
/cart/
/my-account/
/checkout/
En plus de ces réécriture, worpress a ajouté une réécriture pour supprimer index.php de l'URL. La réécriture index.php est à peu près la seule chose qui fonctionne. voici mon .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (checkout|cart|my-account)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=302,L]
# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
</IfModule>
# END WordPress
Ci-dessous, vous pouvez voir mon accès à la version http de/cart pour être correctement informé que celui-ci a été déplacé vers https/cart. J'ai donc essayé la version https pour me faire savoir qu'elle était passée à la même version https et donc une boucle. .
PS C:\Users\Stephen> C:\Users\Stephen\Downloads\curl-7.23.1-win64-ssl-sspi\curl.exe -k -i http://www.mysite.com/cart
HTTP/1.1 302 Found
Date: Wed, 20 Feb 2013 09:07:06 GMT
Server: Apache
Location: https://www.mysite.com/cart
Vary: Accept-Encoding
Content-Length: 285
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://www.mysite.com/cart">here</a>.</p>
<hr>
<address>Apache Server at www.mysite.com Port 80</address>
</body></html>
PS C:\Users\Stephen> C:\Users\Stephen\Downloads\curl-7.23.1-win64-ssl-sspi\curl.exe -k -i https://www.mysite.com/cart
HTTP/1.1 302 Found
Date: Wed, 20 Feb 2013 09:07:06 GMT
Server: Apache
Location: https://www.mysite.com/cart
Vary: Accept-Encoding
Content-Length: 285
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://www.mysite.com/cart">here</a>.</p>
<hr>
<address>Apache Server at www.mysite.com Port 80</address>
</body></html>
Il redirige vers le https mais reste bloqué dans une boucle et le navigateur se plaint d'une boucle. Tout gourou de réécriture est ici.
Je ne suis en aucun cas un expert en mod_rewrite, mais est-ce que quelque chose comme ce travail fonctionnerait?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Force HTTPS for /cart/
RewriteCond %{HTTPS} !=on
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/cart [NC]
RewriteRule ^(cart) https://%{HTTP_Host}%{REQUEST_URI} [NC,R=301,L]
# Force HTTPS for /my-account/
RewriteCond %{HTTPS} !=on
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/my-account [NC]
RewriteRule ^(my-account) https://%{HTTP_Host}%{REQUEST_URI} [NC,R=301,L]
# Force HTTPS for /checkout/
RewriteCond %{HTTPS} !=on
RewriteCond %{THE_REQUEST} ^[A-Z]+\s/checkout [NC]
RewriteRule ^(checkout) https://%{HTTP_Host}%{REQUEST_URI} [NC,R=301,L]
# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
</IfModule>
# END WordPress
Je suis sûr que les 3 déclarations distinctes pourraient être combinées d'une manière ou d'une autre, mais comme je l'ai dit, je ne suis pas un expert. Faites-moi savoir si cela fonctionne correctement pour vous si.