web-dev-qa-db-ja.com

HTTPをHTTPにリダイレクトするには、.htaccessを使用します。

173人以上の投票を含む 長くて非常に詳細なスレッド を推奨しないでください。私にはうまくいきませんでした。他にもいろいろ試してみました( 12 、、 4 )。それらはすべて私にTOO_MANY_REDIRECTSまたはエラー500を与えます。だから、ここに私の問題です:

私の現在の.htaccessでは、これが起こります。

https://www.dukescasino.com/ - 完璧に動作します

https://dukescasino.com/ - 上記のどれにリダイレクトしてください

以下の2つのオプションは問題なくロードできますが、httpsバージョンにリダイレクトする必要があります。

http://www.dukescasino.com/

http://dukescasino.com/

これが現在の.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>

私はそれが関連しているとは思わないが、もしそうであれば、これは現在アクティブなプラグインのリストです:

  • 高度なカスタムフィールド
  • オールインワンSEOパック
  • ナビゲーションメニューのBop検索ボックス項目タイプ
  • お問い合わせフォーム7
  • コメントを無効にする
  • Google XMLサイトマップ
  • WordPress.comでのJetpack
  • 検索とフィルタ
  • スライダーWD
  • TablePress
  • UpdraftPlus - バックアップ/復元
  • Wordfenceのセキュリティ
  • WPide
  • WPスマッシュ
  • WPスーパーキャッシュ

編集1 - 実行されたテスト:

テスト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>

結果:ERR_TOO_MANY_REDIRECTS

テスト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>

結果:ERR_TOO_MANY_REDIRECTS

テスト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>

結果:ERR_TOO_MANY_REDIRECTS

テスト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>

結果:ERR_TOO_MANY_REDIRECTS

テスト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>

結果:302が見つかりました。また、ErrorDocumentを使用して要求を処理しようとしたときに500 Internal Server Errorエラーが発生しました。

70
Cristiano Maia

問題が解決しました!

最後の.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>
86
Cristiano Maia

Dreamhostでは、これはうまくいきました。

<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>
136
Jason Shah

わたしにはできる:

# 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
15
henrike

私の場合、htaccessファイルには、Far Future ExpirationWPSuperCacheとwordpress自体からの行も。

混乱させないために、私はhtaccessの一番上に解決策を置かなければなりませんでした(あなたが最後にそれを置くなら、それはキャッシュプラグインとの衝突のために間違ったリダイレクトを引き起こす)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

こうすることで、設定が変わっても、あなたの行がワードプレスでめちゃくちゃになることはありません。また、 <IfModule> セクションは問題なく繰り返すことができます。

私は Jason Shah きちんとした htaccess rule に感謝しなければなりません。

11

あなたの情報については、それは本当にあなたのホスティングプロバイダに依存します。

私の場合( Infomaniak )、上記のものは実際には機能せず、無限のリダイレクトループが生じました。

これを行う正しい方法は 実際にはサポートサイトで説明されています

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

だから、常にあなたのホスティングプロバイダに確認してください。うまくいけば、彼らはこれを行う方法を説明する記事を持っています。それ以外の場合は、サポートに依頼してください。

4
Indigo

これはテスト済みで安全に使用できます

なぜですか?Wordpress 書き換えルールの編集の場合は、HTTPSルールを削除しないでください!だからこれは競合しないネイティブのWordpressのルールと同じだ。

<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

注:あなたは変更する必要がありますWordPressアドレスサイトアドレスで[https://]へのURL 全般設定も(wp-admin/options-general.php

2
l2aelba

からhttpをhttpsにリダイレクトする最も簡単な方法wordpressからsite_urlと自宅を変更する http://example.com から - https://example.com 。 Wordpressがリダイレクトを行います。 (これが、 "リダイレクトが多すぎる"というエラーを受け取る理由です。ワードプレスはhttpにリダイレクトし、.htaccessはhttpsにリダイレクトします)。

1
Rafael

残念ながら、このQ&Aにリストされているすべての解決策が私にはうまくいかなかったことがわかりました。仕事は何でした:

# 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

上記のWordpressのルールは、マルチユーザネットワークモードのWordpress用です。 Wordpressがシングルサイトモードの場合は、次のようにします。

# 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
1
Steve

上記のどれも私のために働きませんでした。しかし、これらの行は私のWordPressサイトで同じ問題を解決しました:

RewriteEngine On

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

これをWordPressの.htaccessファイルに追加します。

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

したがって、デフォルトのWordPressの.htaccessファイルは次のようになります。

<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>
0
Tommykx

これが私のために働いた場合なし。まず第一に私は私のプロバイダが与える.htaccessの中でどのようにSSLを有効にするかを見るために私のプロバイダを見なければなりませんでした

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

しかし、私の調査に何日かかかったのは、私の提供しているサイトがプロキシの背後にあるため、wp-config.phpに次の行を追加しなければならなかったことです。

/**
 * Force le SSL
 */
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';
0
Alain ANDRE
<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>
0
Saurabh Panchal

.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();

        }

    }

}

あなたはこれをあなたのテーマの一番下に置くことができますfunctions.php

0
Higher Coding

上記の最後の.htaccessとテストA、B、C、D、Eは私にとってはうまくいきませんでした。私は2行以下のコードを使用しました、そしてそれは私のWordPressウェブサイトで動作します:

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

どこで間違いを犯しているのかわかりませんが、このページが役に立ちました。

0
Raj Singh

Httpから https:// www にリダイレクトします

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

これは確かに機能します!

0
Kundan roy

このコードをwordpressの.htaccessファイルに追加または置換するだけです。

# 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
0
Zihadul Islam