現在SSL証明書がないサイトでは、https
のURLをhttp
にリダイレクトするために現在functions.php
を使用しています。
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');
これと同じ機能の中で、私はwww
サブドメインも非wwwにリダイレクトしたいと思います。私は良い関数を見つけました ここ 、しかし私の現在の関数にそれを実装するのを手伝う必要があります。私は.htaccess
でこれをしないようにしたいのですが、そこでも解決策を歓迎するでしょう。
ご協力ありがとうございました。しかし、次のコードはhttps
をhttp
に、そしてwww
を非wwwにリダイレクトするために私が最後にうまくいったものです。次のコードブロックを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;
}
}
break;
が必要だとは思わないが、exit;
は絶対に必要で、念のためbreak;
は残しました。どうして私が両方を必要としないのか、私に遠慮なく教えてください。上記のコードは次のようなリダイレクトになります。
https://www.example.com to http://example.com
non-www
を使用してHTTPS
をHTTP
に、www
を.htaccess
にリダイレクトする方法:まずHTTPS
が機能していて有効であることを確認してください。 暗号化しましょう 最近では(そして無料で)できます。
注:
HTTPS
をHTTP
にリダイレクトしていますが、その逆、つまりHTTP
からHTTPS
にすることをお勧めします。セキュリティ、SEO、ブラウザの互換性に優れています - 一般的なブラウザでは、HTTP
サイトにとってますます困難になっています。
それから.htaccess
とmod_rewrite
モジュールが動いていることを確認してください。
次に、Webルートディレクトリの.htaccess
ファイルで次のコードを使用します(既にそこで何らかのルールを使用している場合は、これらの新しいルールを使用して適切に調整します)。
<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>
注:
example.com
を自分のドメイン名に置き換えます。
.htaccess
ソリューションが良いのですか?Webサーバーを使ってこのようなリダイレクトを行う方が良いでしょう。あなたの質問から、あなたのWebサーバはApache
のように思われるので、それは.htaccess
を使ったほうが良いです。なぜ:
functions.php
ファイルはよりきれいなままであり、そしてそれはもともとそこにあったこと、すなわちテーマの修正を行います。あなたのコードから、私はこのようにリファクタリングします:
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();
}
}
それをリダイレクトのための.htaccess
ルールに追加しますwww-> non-www
RewriteEngine On
RewriteCond %{HTTP_Host} ^www.yourdomain.com [NC]
RewriteRule ^(.*)$ http://yourdomain.com/$1 [L,R=301]
Https-> httpのリダイレクト
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI}
しかし、これが機能するためには、有効なSSLが必要です。そうしないと、「Terror screen」がユーザーに表示されます。
ここでは、この更新された機能を使用して、wwwサイトを非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();
}
}
これが役立つかどうか私に知らせてください。