web-dev-qa-db-de.com

HTTP to HTTPS Redirect: So erstellen Sie keine Endlosschleife

Ich habe ein WordPress auf einer Subdomain installiert: https://blog.example.com

Um SSL zu erzwingen, habe ich die folgenden Weiterleitungen in meinem .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On

# BEGIN FORCE HTTPS
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}/$1 [R=301]
# END FORCE HTTPS

# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

</IfModule>

Das hat bis vor einiger Zeit funktioniert. Wenn ich jetzt http://blog.example.com anrufe, erhalte ich:

dauerhaft verschoben

Das Dokument wurde hierher verschoben.

Bei dem Versuch, ein ErrorDocument zu verwenden, um die Anforderung zu verarbeiten, trat ein 500 Internal Server Error Fehler auf.

Das Wort "hier" in Zeile 2 verweist auf http://blog.example.com.

Was ist los mit dem .htaccess?

Ich habe die WordPress Einstellungen überprüft und sie sind nicht das Problem: Die Site-URL ist korrekt auf https://blog.example.com eingestellt.

1
bootsmaat

Ich konnte das Problem beheben, indem ich den .htaccess wie folgt änderte:

<IfModule mod_rewrite.c>
RewriteEngine On

# BEGIN FORCE HTTPS
RewriteCond %{HTTPS} !=on
RewriteCond %{ENV:HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]*
# END FORCE HTTPS

# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

</IfModule>
1
bootsmaat

Dies sind wirklich zusätzliche Informationen, da Sie anscheinend bereits Ihre Lösung gefunden haben, aber trotzdem ...

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}/$1 [R=301]

Ich denke nicht, dass dies jemals wie beabsichtigt funktioniert hätte, da Sie das L (last) -Flag auf dem RewriteRule vermissen. Wenn dies vorher "funktionierte", würde ich vermuten, dass WordPress tatsächlich die entsprechende Umleitung herausgab?

Da das L -Flag hier weggelassen wird, wurde die Umschreibe-Engine auf Ihrem Front-Controller fortgesetzt und die URL intern in index.php umgeschrieben. Ohne das Eingreifen von WordPress hätte dies dazu geführt, dass ein 301-Statuscode an den Client zurückgegeben wurde, jedoch ohne einen HTTP-Antwortheader Location (für die externe Umleitung erforderlich). Dies könnte für SEO potenziell schädlich sein.

Dies allein erklärt jedoch nicht die Umleitungsschleife. Dies liegt möglicherweise an einer Änderung der SSL-Implementierung auf Ihrem Server, die in Ihrer Antwort vorgeschlagen wird.

1
MrWhite

Da Sie WordPress verwenden, können Sie jederzeit die ersten beiden Einträge der Tabelle wp_options in Ihre https-Domain ändern.

Eine andere Möglichkeit, dies zu erreichen, besteht darin, Site Home und WP Home in die Datei wp-config.php aufzunehmen. Hier ist das Link zum entsprechenden Codex .

0
Prasad Ajinkya