Verwenden Sie .htaccess, um HTTP zu HTTPs umzuleiten

76

Bitte empfehlen Sie mir nicht den langen und sehr detaillierten Thread mit mehr als 173 Upvotes. Bei mir hat es nicht funktioniert. Ich habe auch viele andere ausprobiert ( 1 , 2 , 3 , 4 ). Sie alle geben mir TOO_MANY_REDIRECTS oder Fehler 500. Also, hier ist mein Problem:

Mit meinem aktuellen .htaccess passiert Folgendes:

https://www.dukescasino.com/ - funktioniert perfekt

https://dukescasino.com/ - leitet zu den oben genannten weiter, was großartig ist

Die beiden folgenden Optionen werden problemlos geladen, sollten jedoch auf die https-Version umgeleitet werden:

http://www.dukescasino.com/

http://dukescasino.com/

Hier ist der aktuelle .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

Ich glaube nicht, dass es relevant ist, aber wenn ja, hier ist die Liste der aktuell aktiven Plugins:

  • Erweiterte benutzerdefinierte Felder
  • Alles in einem SEO Pack
  • Bop-Suchfeld Elementtyp für Navigationsmenüs
  • Kontaktformular 7
  • Kommentare deaktivieren
  • Google XML-Sitemaps
  • Jetpack von WordPress.com
  • Suchen & Filtern
  • Schieberegler WD
  • TablePress
  • UpdraftPlus - Sichern / Wiederherstellen
  • Wordfence-Sicherheit
  • WPide
  • WP Smush
  • WP Super Cache

Edit 1 - Durchgeführte Tests:

Test A:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

Ergebnis: ERR_TOO_MANY_REDIRECTS

Test B:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

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

Ergebnis: ERR_TOO_MANY_REDIRECTS

Test C:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{SERVER_PORT} ^80$
 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

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

Ergebnis: ERR_TOO_MANY_REDIRECTS

Test D:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

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

Ergebnis: ERR_TOO_MANY_REDIRECTS

Test E:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}$1

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

Ergebnis: 302 gefunden. Darüber hinaus ist beim Versuch, ein ErrorDocument zur Bearbeitung der Anforderung zu verwenden, ein Fehler mit 500 internen Servern aufgetreten.

Cristiano Maia
quelle
Vielleicht nur ein Tippfehler, aber Sie haben .htaccessdreimal (auf die gleiche Weise) falsch geschrieben ? Ihre aktuelle .htaccess-Datei ist nicht vollständig, Ihnen fehlt eine RewriteEngine OnDirektive. Vermutlich, wenn Sie die kanonische Weiterleitung hinzufügen, fügen Sie diese ganz oben in Ihrer .htaccess-Datei hinzu? Sie geben an, dass https://example.comWeiterleitungen OK sind, dies ist jedoch in Ihrer Konfigurationsdatei nicht angegeben? Wo / wie passiert das? Es wäre nützlich zu wissen, was Sie tatsächlich versucht haben - das funktioniert nicht.
MrWhite
Entschuldigung, der .htaccess war ein Tippfehler, ich habe ihn jetzt behoben. Ich habe auch den aktuellen .htaccess-Code und alle Tests, die ich durchgeführt habe, mit den Ergebnissen der einzelnen aktualisiert. Ich weiß allerdings nicht, wie das https ohne www zur www- Version umleitet . Vielen Dank
Cristiano Maia
Normalerweise erwarten Sie, dass die Servervariable HTTPSfestgelegt wird (Ihre Ergebnisse legen etwas anderes nahe). Stehst du hinter einem Proxy? (Test E wird wahrscheinlich zu einer Art "rekursivem" 404 führen?)
MrWhite
Ich habe gerade 123-reg (Hosting-Unternehmen) kontaktiert, um zu überprüfen, ob auf ihrer Seite etwas eingerichtet ist, das die Dinge durcheinander bringt. Selbst wenn ich das funktionierende .htaccess-Tool habe und das Redirect-Tool in der (123reg) -Steuerung ausrichte, erhalte ich ERR_TOO_MANY_REDIRECTS.
Cristiano Maia

Antworten:

140

Bei Dreamhost funktionierte dies:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Jason Shah
quelle
1
Dieser ist für mich auf namecheap Shared Hosting gearbeitet.
Liakat
1
Arbeitete auch auf asmallorange.com
Leonardo Herrera
Arbeitete für mich auf einem LAMP-Server mit Wordpress 4.7.4 auf dem Anbieter Time4VPS
John Smith
Stellen Sie sicher, dass die genaue Reihenfolge der Regeln korrekt ist. Ich hatte die Umschreiberegel unter die vorhandenen WordPress-Regeln gestellt, aber dann wurde nur die Stammdomäne umgeleitet und keine HTTP-URI-Anforderungen. Diese korrekte Reihenfolge über den vorhandenen WordPress-Regeln leitet alle HTTP-Anforderungen ordnungsgemäß weiter.
Delrocco
3
Es ist nicht nötig, auf jeden einzelnen Host hinzuweisen, auf dem dies funktioniert! Es ist ein unkomplizierter Code für .htaccess, daher sollte er auf den meisten Systemen funktionieren, die .htaccess akzeptieren. Wenn es nicht funktioniert, liegt es an einem seltsamen Szenario.
Phill Healey
91

Problem gelöst!

Endgültiger .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Cristiano Maia
quelle
19
Diese Änderung führte dazu, dass "[www.domain.com] Sie zu oft umgeleitet hat" für eine Domain, die ich auf Dreamhost hoste. Kein Glück. Dies funktionierte jedoch: RewriteCond% {HTTPS}! = Auf RewriteRule ^ https: //% {HTTP_HOST}% {REQUEST_URI} [L, R = 301]
Jason Shah
11
Ich musste nur die RewriteCondfolgende ändern , um Folgendes zu vermeiden too many redirects:RewriteCond %{HTTPS} !=on
lucaferrario
Für mich auf virtualmin Apache 2.4 verboten verursacht. Die Lösung von @ jason-shah hat funktioniert.
Aleksandar Pavić
Funktioniert bei mir nicht Diese Lösung leitet "Sie zu oft" weiter. Chrom sagt.
Zhekaus
3
Dies ist die einzige Lösung, die für mich funktioniert hat. (Viel zu viele getestet.) Das "ENV:" war entscheidend. Aus den Antworten und andere Lösungen, so scheint es , dass auf einigen Host entweder Sie enthalten haben es während andere Sie es verlassen haben heraus . Übrigens: Wenn Sie dies verwenden möchten, ziehen Sie die Verwendung R=301anstelle von nur in Betracht R(was 302-Umleitung bedeutet).
Vit Kovalcik
15

Für mich geht das:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on           
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
Henrike
quelle
11

In meinem Fall enthielt die htaccess-Datei viele Regeln, die von Plugins wie Far Future Expiration und WPSuperCache installiert wurden, sowie die Zeilen von WordPress selbst.

Um die Dinge nicht durcheinander zu bringen, musste ich die Lösung an die Spitze von htaccess setzen (dies ist wichtig, wenn Sie sie am Ende platzieren, führt dies aufgrund von Konflikten mit dem Cache-Plugin zu falschen Weiterleitungen).

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

Auf diese Weise werden Ihre Zeilen nicht durch WordPress durcheinander gebracht, falls sich einige Einstellungen ändern. Auch der <IfModule>Abschnitt kann problemlos wiederholt werden.

Ich muss Jason Shah für die ordentliche Zugangsregel danken .

Hüseyin Yağlı
quelle
Dies sind wichtige Informationen. Danke, dass du es gepostet hast!
Henrik Petterson
4

Zu Ihrer Information, es hängt wirklich von Ihrem Hosting-Anbieter ab.

In meinem Fall ( Infomaniak ) hat nichts oben tatsächlich funktioniert und ich habe eine Endlosumleitungsschleife erhalten .

Der richtige Weg dazu wird auf der Support-Website erklärt :

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://your-domain.com/$1 [R=301,L]

Wenden Sie sich daher immer an Ihren Hosting-Anbieter. Hoffentlich haben sie einen Artikel, der erklärt, wie das geht. Andernfalls fragen Sie einfach den Support.

Indigo
quelle
2

Dies ist getestet und sicher zu bedienen

Warum?: Wenn Wordpress Ihre Regeln zum erneuten Schreiben bearbeitet , stellen Sie daher sicher, dass Ihre HTTPS-Regel nicht entfernt wird ! Dies ist also kein Konflikt mit nativen Wordpress-Regeln.

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

# BEGIN WordPress
<IfModule mod_rewrite.c>
  #Your our Wordpress rewrite rules...
</IfModule>
# END WordPress

Hinweis: Sie müssen die URLs für WordPress-Adresse und Site-Adresse auch https://in den allgemeinen Einstellungen ändern ( wp-admin/options-general.php)

l2aelba
quelle
Der WordPress-Teil sollte nach dem HTTPS-Teil gehen, sonst funktioniert er nicht. Oder zumindest ist das für mich passiert :)
Ste_95
Bestätigen, was @ Ste_95 gesagt hat. Ich musste den HTTPS-Umschreibblock vor die Standard-WP-Permalink-Konfiguration setzen.
Justin Tilson
1

Ich habe festgestellt, dass alle in diesen Fragen und Antworten aufgeführten Lösungen bei mir leider nicht funktionieren. Was funktionierte war:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress

Beachten Sie, dass die obigen Wordpress-Regeln für Wordpress im Mehrbenutzernetzwerkmodus gelten. Wenn sich Ihr Wordpress im Single Site-Modus befindet, würden Sie Folgendes verwenden:

# 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]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress
Steve
quelle
1

Nichts von alledem hat bei mir funktioniert. Aber diese Zeilen lösten das gleiche Problem auf meiner WordPress-Site:

RewriteEngine On

RewriteCond %{HTTP:HTTPS} !on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Lundgren
quelle
1

Der einfachste Weg, http in WordPress zu https umzuleiten , um site_url und home von http://example.com zu https://example.com zu ändern . Wordpress übernimmt die Umleitung. (Aus diesem Grund wird der Fehler "Zu viele Weiterleitungen" angezeigt. WordPress leitet zu http um, während .htaccess zu https umleitet.)

Rafael
quelle
Ich bin nicht sicher, ob es eine Umleitung für SEO macht :)
jcdarocha
1
sicher tut es. Weiterleitung 301 (permanent), Google wird neu indizieren
Rafael
Beachten Sie, dass dies mit der Google Search Console nicht funktioniert!
Hexodus
es wird gut funktionieren .... WordPress wird eine Umleitung durchführen (301). Denken Sie daran: RTFM
Rafael
0

Hier ist eine alternative Lösung, die Sie verwenden können, wenn Sie nicht bearbeiten möchten .htaccess:

add_action( 'template_redirect', 'nonhttps_template_redirect', 1 );

function nonhttps_template_redirect() {

    if ( is_ssl() ) {

        if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'https' ) ) {

            wp_redirect( preg_replace( '|^http://|', 'https://', $_SERVER['REQUEST_URI'] ), 301 );

            exit();

        } else {

            wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );

            exit();

        }

    }

}

Sie können dies am Ende Ihres Themas platzieren functions.php

Höhere Codierung
quelle
Ich bin mir noch nicht ganz sicher, ob es gleich bleiben wird, je nachdem, warum Google es möglicherweise als HTTPS-Version indiziert hat.
Höhere Codierung
0

Fügen Sie dies in die .htaccess-Datei von WordPress ein:

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]

Daher sollte die Standard-WordPress-Datei .htaccess folgendermaßen aussehen:

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

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]
</IfModule>
Tommykx
quelle
0
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^digitalsoftwaremarket.com [NC]
    RewriteRule ^(.*)$ http://www.digitalsoftwaremarket.com/$1 [L,R=301]
</IfModule>
Saurabh Panchal
quelle
0

Der obige endgültige .htaccess und Test A, B, C, D, E haben bei mir nicht funktioniert. Ich habe gerade den 2-Zeilen-Code verwendet und er funktioniert auf meiner WordPress-Website:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.thehotskills.com/$1 [R=301,L]

Ich bin nicht sicher, wo ich den Fehler gemacht habe, aber diese Seite hat mir geholfen.

Raj Singh
quelle
0

Keine, wenn das bei mir funktioniert hat. Zuerst musste ich mir meinen Provider ansehen, um zu sehen, wie sie SSL in .htaccessmeinem Provider aktivieren

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTP:HTTPS} !on
   RewriteRule (.*) https://%{SERVER_NAME}/$1 [QSA,L,R=301]
</IfModule>

Was mich Tage der Recherche gekostet hat, war, dass ich wp-config.phpdie folgenden Zeilen ergänzen musste, da sich meine bereitgestellte Site hinter einem Proxy befindet:

/**
 * Force le SSL
 */
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';
Alain ANDRE
quelle
0

Fügen Sie einfach diesen Code in Ihrer .htaccess-Datei in WordPress hinzu oder ersetzen Sie ihn

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
Zihadul Islam
quelle
0

Weiterleiten von http zu https: // www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Das wird sicher funktionieren!

Kundan Roy
quelle
-1

Fügen Sie einfach diesen Code hinzu, und es wird wie ein Zauber funktionieren:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
    RewriteRule ^ http%2://%1%{REQUEST_URI} [R=301,L]
</IfModule>
Ein Mann
quelle