it-swarm.com.de

mod_rewrite-Schleife, die http in bestimmten Abschnitten des WordPress-Blogs zu https umleitet

Ich versuche, 3 Abschnitte einer WordPress-Site auf https umzuschreiben, wenn auf sie über http zugegriffen wird:

/cart/

/my-account/

/checkout/

Zusätzlich zu diesen Neuerstellungen hat die Worpress eine Neuerstellung hinzugefügt, um index.php aus der URL zu entfernen. Das Neuschreiben von index.php ist das einzige, was funktioniert. Hier ist mein .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

Einige Curl-Tests

In der folgenden Abbildung können Sie sehen, dass bei meinem Zugriff die http-Version von/cart zu Recht angezeigt wird, dass diese in https/cart verschoben wurde. Ich versuche dann, der https-Version mitzuteilen, dass sie in dieselbe https-Version verschoben wurde, wodurch eine Schleife entsteht .

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>

Es leitet zu https weiter, bleibt dann aber in einer Schleife stecken und der Browser beschwert sich über eine Schleife. Jeder neu geschriebene Guru ist hier.

1
0x7c0

Ich bin auf keinen Fall ein Mod_rewrite-Experte, aber würde so etwas funktionieren?

<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

Ich bin mir sicher, dass die drei einzelnen Aussagen irgendwie kombiniert werden könnten, aber wie gesagt, ich bin kein Experte. Lassen Sie mich wissen, ob dies für Sie richtig funktioniert.

1
Josh Mountain