it-swarm.com.de

Weiterleitung zu https funktioniert nicht mit .htaccess

Ich habe das folgende Setup in meiner .htaccess-Datei, kann aber trotzdem über http: zu meiner Site wechseln

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# Rewrite HTTP to HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

# END WordPress

Irgendeine Idee, was ich falsch machen könnte?

1

Sie haben den Code an der falschen Stelle eingegeben. Die HTTP-zu-HTTPS-Direktiven müssen vor dem WordPress-Front-Controller sein, sonst wird es einfach nie für etwas anderes als direkte Dateianforderungen verarbeitet.

Ihre benutzerdefinierten Anweisungen sollten sich auch außerhalb des # BEGIN WordPress -Blocks befinden, da sonst WordPress selbst in einem zukünftigen Update wahrscheinlich Ihre Anweisungen überschreibt.

Zum Beispiel:

# Redirect HTTP to HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]    
</IfModule>
# END WordPress

Es ist eine "Umleitung", keine "Umschreibung". Ändern Sie die R in R=301, wenn Sie sicher sind, dass sie in Ordnung ist (da dies letztendlich eine permanente Umleitung sein sollte).

1
MrWhite

Kennen Sie das [L]-Flag für mod_rewrite? Es bewirkt, dass mod_rewrite die Verarbeitung des Regelsatzes beendet. In den meisten Kontexten bedeutet dies, dass keine weiteren Regeln verarbeitet werden, wenn die Regel übereinstimmt.

Siehe: https://httpd.Apache.org/docs/2.4/rewrite/flags.html#flag_l

Beachten Sie, dass Ihre Umschreiberegeln über der http-> https-Regel dieses Flag verwenden. Diese Regeln sehen aus wie die Regeln von WordPress, mit denen Anforderungen, die nicht für eine bestimmte Datei oder ein bestimmtes Verzeichnis gelten, zur Bearbeitung an index.php umgeleitet werden.

Eine Idee ist, die Reihenfolge so zu ändern, dass Ihre Regeln nach Rewrite Engine On erscheinen, damit zuerst die http-vs-https-Prüfung durchgeführt wird, die Umleitung stattfinden kann und dann bei der folgenden umgeleiteten Anforderung (die jetzt https lautet). Die folgenden Regeln für die WordPress-Funktionalität können angewendet werden.

Sie können auch versuchen, RewriteCond {HTTPS} != on als RewriteCond %{HTTPS} off und Ihre RewriteRule-Zeile als RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301] zu schreiben, um dies genauer zu formulieren, und einen http 301-Umleitungsstatuscode (permanent) zurücksenden.

EDIT: Ich habe gerade MrWhites Kommentar gesehen, wir haben zur gleichen Zeit geschrieben. Er hat auch gute Ratschläge: Stellen Sie Ihre überarbeiteten Regeln außerhalb des #WORDPRESS-Kommentarblocks, damit zukünftige WordPress-Updates sie nicht überfrachten!

1
firxworx