PHP – Umleiten von https zu http und www zu nicht-www

** EDIT: Ich habe es endlich herausgefunden. Scrollen Sie nach unten für meine selbst angenommene Antwort (grünes Häkchen) **

Ich verwende derzeit functions.php , um https URLs für eine Website, die derzeit kein SSL-Zertifikat hat, an http weiterzuleiten:

 function shapeSpace_check_https() { if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443) { return true; } return false; } function bhww_ssl_template_redirect() { if ( shapeSpace_check_https() ) { if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) { wp_redirect( preg_replace( '|^https://|', 'http://', $_SERVER['REQUEST_URI'] ), 301 ); exit(); } else { wp_redirect( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 ); exit(); } } } add_action( 'template_redirect', 'bhww_ssl_template_redirect'); 

In derselben function möchte ich auch die www Subdomain zu non-www redirect. Ich habe hier eine gute function gefunden , brauche aber Hilfe bei der Implementierung in meine aktuelle function. Ich würde es gerne vermeiden, dies in .htaccess zu tun, würde aber auch dort eine Lösung begrüßen.

Solutions Collecting From Web of "PHP – Umleiten von https zu http und www zu nicht-www"

Umleiten von HTTPS zu HTTP und www zu non-www URL mit .htaccess :

  1. Stellen Sie zuerst sicher, dass HTTPS funktioniert und gültig ist. Es ist einfach (und kostenlos) mit Let’s Encrypt in diesen Tagen zu tun.

    Hinweis: Obwohl Sie HTTPS zu HTTP redirect, empfehle ich, das Gegenteil zu tun, dh HTTP zu HTTPS . Besser für Sicherheit, SEO & Browser-Kompatibilität – populäre Browser machen es zunehmend schwieriger für HTTP Sites.

  2. .htaccess dann sicher, dass das .htaccess und mod_rewrite Modul funktioniert.

  3. Verwenden Sie dann den folgenden CODE in der .htaccess Datei Ihres Web-Stammverzeichnisses (wenn Sie dort bereits einige Regeln verwenden, passen Sie sie entsprechend mit diesen neuen Regeln an):

      RewriteEngine On RewriteCond %{HTTPS} =on [OR] RewriteCond %{HTTP_HOST} !^example\.com$ RewriteRule ^(.*)$ "http://example.com/$1" [R=301,L] # remaining htaccess mod_rewrite CODE for WordPress  

    Hinweis: Ersetzen Sie example.com durch Ihren eigenen Domainnamen.


Warum .htaccess Lösung ist besser:

Es ist besser, diese Art von Redirects mit dem Webserver durchzuführen. Da Ihr Webserver anscheinend Apache , ist es besser mit .htaccess . Warum:

  1. Es ist schneller.
  2. Deine functions.php Datei bleibt sauberer und macht das, wofür sie ursprünglich gedacht ist, also Theme-Modifikationen.
  3. Das Ändern des Designs hat keinen Einfluss darauf.
  4. Bei jeder Weiterleitung muss die gesamte WordPress-Codebasis nicht doppelt geladen werden – einmal vor der Weiterleitung und dann nach der Weiterleitung.

Aus deinem Code würde ich es so umgestalten:

 function bhww_ssl_template_redirect() { $redirect_url=''; if ( shapeSpace_check_https() ) { if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) { $url = $_SERVER['REQUEST_URI']; $not_allowed = array('https://www', 'https://'); foreach($not_allowed as $types) { if(strpos($url, $types) === 0) { $redirect_url = str_replace($types, 'http://', $url); } } } else { $redirect_url ='http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } $redirect_url = !empty($redirect_url)?$redirect_url:$url; wp_redirect($redirect_url, 301 ); exit(); } } 

Fügen Sie die .htaccess Regeln für die Weiterleitung www-> non-www hinzu

 RewriteEngine On RewriteCond %{HTTP_HOST} ^www.yourdomain.com [NC] RewriteRule ^(.*)$ http://yourdomain.com/$1 [L,R=301] 

Umleiten von https-> http

 RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

Aber damit das funktioniert, brauchen Sie ein gültiges SSL oder der “Terror Screen” wird den Benutzern angezeigt.

Verwenden Sie diese aktualisierte function, um eine www-Site an non-www umzuleiten:

 function bhww_ssl_template_redirect() { $redirect_url=''; $url = $_SERVER['REQUEST_URI']; if ( shapeSpace_check_https() ) { if ( 0 === strpos( $url, 'http' ) ) { if(strpos($url, 'https://') === 0) { $redirect_url = str_replace('https://', 'http://', $url); } } elseif ( TRUE == strpos( $url, 'www.') { $redirect_url = str_replace('www.', '', $url); } else { $redirect_url ='http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } $redirect_url = !empty($redirect_url)?$redirect_url:$url; wp_redirect($redirect_url, 301 ); exit(); } } 

Lassen Sie mich wissen, ob das hilft.

Danke an alle für Ihre Hilfe. Aber der folgende Code ist, was schließlich für mich funktioniert 301 Umleiten von https zu http und www zu nicht-www. Ich habe den folgenden Codeblock innerhalb von functions.php :

 //check if https being used regardless of certificate function shapeSpace_check_https() { if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443) { return true; } return false; } for ($x=0; $x<1; $x++) { //if https:// && www. if ( shapeSpace_check_https() && substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.'){ header('HTTP/1.1 301 Moved Permanently'); header('Location: http://' . substr($_SERVER['HTTP_HOST'], 4).$_SERVER['REQUEST_URI']); exit; break; //if only www. } elseif (substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.') { header('HTTP/1.1 301 Moved Permanently'); header('Location: http://' . substr($_SERVER['HTTP_HOST'], 4).$_SERVER['REQUEST_URI']); exit; break; //if only https:// } elseif ( shapeSpace_check_https() ) { header('HTTP/1.1 301 Moved Permanently'); header('Location: http://' . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit; break; } } 

Ich glaube nicht, dass ich die break; brauche break; ist, aber ich brauche definitiv den exit; und ich habe die break; ist nur für den Fall. Bitte zögern Sie nicht, mir zu erklären, warum ich beide nicht brauche. Der obige Code führt zu den folgenden Weiterleitungen:

https://www.example.com zu http://example.com

https://example.com zu http://example.com

http://www.beispiel.com zu http://beispiel.com