web-dev-qa-db-ja.com

.htaccessを使用してHTTPSを強制する - リダイレクトループで動かない

私のWordpressのウェブサイトはexample.com/wordpressにあり、私はSSLを使用してのみアクセス可能であるために内部のすべてが必要です。

Http - > httpsをリダイレクトする.htaccessルールを作成しました。

RewriteEngine On
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]

この規則を実行した後、Webサイトはリダイレクトループに陥っているためアクセスできません。

何がおかしいのですか?

私のWordpressの.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]
</IfModule>
4
SkyHiRider

これは遅い答えですが、これは私のために働きます:

RewriteCondをこれに変更してください。

RewriteCond %{HTTP:X-Forwarded-Proto} !https

このようにする必要があります:

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://yourdomain.com/$1 [R,L]
4

Htaccessのエキスパートにならずに、RewriteCond - A conditionが欠けていると思います.

それがポート80にあるかどうか確認してください。これを試してください:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]

更新:

更新された質問を見た後、完全な.htaccessで - これをします:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/directory/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/directory/index.php [L]

RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/wordpress/directory/$1 [R,L]
</IfModule>

あなたの状態と規則をWordpressの標準の下に置く。

2
Frederik Spang
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

情報源 https://www.godaddy.com/help/redirect-http-to-https-automatically-8828

1
Abed Putra

HTTP_X_FORWARDED_PROTOをサポートするロードバランサまたはリバースプロキシの背後にあるWebサイトは、require_once呼び出しの上に次のコードをwp-config.phpファイルに追加することで修正できます。

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

またはプラグインを使って

あなたのウェブサイトのWordPressプラグインフォルダに追加して、それからプラグイン管理でそれをアクティブにしてください

<? /* Plugin Name: Set headers */
if (stripos(get_option('siteurl'), 'https://') === 0) {
    $_SERVER['HTTPS'] = 'on';
    // add JavaScript detection of page protocol, and pray!
    add_action('wp_print_scripts', 'force_ssl_url_scheme_script');
}
function force_ssl_url_scheme_script() {
    ?>
    <script>
    if (document.location.protocol != "https:") {
        document.location = document.URL.replace(/^http:/i, "https:");
    }
    </script>
    <?php
}

ソース

それはのように働いています

  • http://www.exmaple.com/blog/tohttps://www.exmaple.com/blog/
  • http://www.exmaple.com/tohttps://www.exmaple.com/
0
krunal sojitra
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

または1ページだけ

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} directory
RewriteRule ^(.*)$ https://www.example.com/directory/$1 [R,L]

あるいは、このphpを特定のファイルに追加することができます。

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { // if request is not secure, redirect to secure url
$url = 'https://' . $_SERVER['HTTP_Host']
. $_SERVER['REQUEST_URI'];

header('Location: ' . $url);
exit;
}

またはワードプレスの書き換えルールとSSLのルールを組み合わせる。

RewriteRule ^(.*)$ https://www.example.com/directory/index\.php[R,L]
0
KJThaDon