Ich verwende derzeit functions.php
, um https
-URLs an http
für eine Site umzuleiten, für die derzeit kein SSL-Zertifikat vorhanden ist:
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 Funktion möchte ich auch die Unterdomäne www
nach non-www umleiten. Ich habe hier eine gute Funktion gefunden, brauche aber Hilfe bei der Implementierung in meine aktuelle Funktion. Ich möchte dies in .htaccess
vermeiden, würde aber auch dort eine Lösung begrüßen.
Vielen Dank an alle für Ihre Hilfe. Aber der folgende Code funktionierte schließlich für mich, um https
zu http
und www
zu Nicht-www umzuleiten. Ich habe den folgenden Codeblock in functions.php
eingefügt:
//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 den break;
brauche, aber ich brauche definitiv den exit;
und ich habe den break;
nur für den Fall gelassen. Bitte zögern Sie nicht, mich zu schulen, warum ich möglicherweise nicht beide brauche. Der obige Code führt zu folgenden Weiterleitungen:
https://www.example.com to http://example.com
HTTPS
zu HTTP
und www
zu non-www
um URL mit .htaccess
:Stellen Sie zunächst sicher, dass HTTPS
funktioniert und gültig ist. Es ist heutzutage einfach (und kostenlos), mit Let's Encrypt umzugehen.
Hinweis:Obwohl Sie
HTTPS
zuHTTP
umleiten, würde ich das Gegenteil empfehlen, d. H.HTTP
zuHTTPS
. Besser für Sicherheit, SEO und Browserkompatibilität - beliebte Browser erschwerenHTTP
Websites zunehmend.
Stellen Sie dann sicher, dass das Modul .htaccess
und mod_rewrite
funktioniert.
Verwenden Sie dann den folgenden CODE in der .htaccess
-Datei Ihres Webstammverzeichnisses (wenn Sie dort bereits einige Regeln verwenden, passen Sie sie mit diesen neuen Regeln entsprechend an):
<IfModule mod_rewrite.c>
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
</IfModule>
Hinweis:Ersetzen Sie
example.com
durch Ihren eigenen Domainnamen.
.htaccess
Lösung besser:Es ist besser, diese Art von Weiterleitungen mit dem Webserver durchzuführen. Aus Ihrer Frage, da Ihr Webserver Apache
zu sein scheint, ist es besser, mit .htaccess
zu tun. Warum:
functions.php
-Datei bleibt sauberer und macht das, wofür sie ursprünglich da war, d. H. Änderungen am Design.Aus Ihrem Code entnommen 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 hinzu www-> non - www
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.yourdomain.com [NC]
RewriteRule ^(.*)$ http://yourdomain.com/$1 [L,R=301]
Https-> http umleiten
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI}
Damit dies funktioniert, benötigen Sie jedoch ein gültiges SSL. Anderenfalls wird den Benutzern der "Terror-Bildschirm" angezeigt.
Verwenden Sie hier diese aktualisierte Funktion, um eine WWW-Site zu einer Nicht-WWW-Site 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.