J'utilise actuellement functions.php
pour rediriger les URL https
vers http
pour un site ne disposant actuellement pas de certificat SSL:
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');
Dans cette même fonction, j'aimerais également rediriger le sous-domaine www
vers un site autre que www. J'ai trouvé une bonne fonction ici , mais j'ai besoin d'aide pour l'implémenter dans ma fonction actuelle. J'aimerais éviter de faire cela dans .htaccess
, mais souhaiterais également une solution.
Merci à tous pour votre aide. Mais le code suivant est ce qui a finalement fonctionné pour moi pour rediriger https
vers http
et www
vers non-www. J'ai placé le bloc de code suivant dans 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;
}
}
Je ne pense pas avoir besoin du break;
, mais j'ai certainement besoin du exit;
et j'ai laissé le break;
au cas où. S'il vous plaît, n'hésitez pas à comprendre pourquoi je n'ai pas besoin des deux. Le code ci-dessus entraîne les redirections suivantes:
https://www.example.com to http://example.com
HTTPS
vers HTTP
et www
vers non-www
URL avec .htaccess
:Tout d’abord, assurez-vous que HTTPS
fonctionne et est valide. C'est facile (et gratuit) de faire avec Encryptons ces jours-ci.
Remarque: Bien que vous redirigiez
HTTPS
versHTTP
name__, je vous conseillerais de l'inverser, c'est-à-direHTTP
versHTTPS
name__. Mieux pour la sécurité, le référencement et la compatibilité des navigateurs - les navigateurs les plus répandus rendent de plus en plus difficile les sitesHTTP
name__.
Ensuite, assurez-vous que les modules .htaccess
et mod_rewrite
fonctionnent.
Puis utilisez le CODE suivant dans le fichier .htaccess
de votre répertoire racine Web (si vous y utilisez déjà des règles, ajustez-les en conséquence avec ces nouvelles règles):
<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>
Note: Remplacez
example.com
par votre propre nom de domaine.
.htaccess
est-elle meilleure?Il est préférable de faire ce type de redirections avec le serveur Web. D'après votre question, étant donné que votre serveur Web semble être Apache
name__, il est préférable de procéder avec .htaccess
. Pourquoi:
functions.php
reste plus propre et fait son travail d’origine, c’est-à-dire les modifications de thème.Tiré de votre code, je voudrais le reformuler comme ceci:
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();
}
}
Ajoutez-y les règles .htaccess
pour la redirection www-> non-www
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.yourdomain.com [NC]
RewriteRule ^(.*)$ http://yourdomain.com/$1 [L,R=301]
Redirection https-> http
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI}
Mais encore une fois pour que cela fonctionne, vous devez avoir un SSL valide ou "l'écran Terror" sera montré aux utilisateurs.
Ici, utilisez cette fonction mise à jour pour rediriger un site www vers un site non-www:
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();
}
}
Faites-moi savoir si cela aide.