web-dev-qa-db-ja.com

htaccess httpsがwwwから非wwwへリダイレクトする

.htaccesshttpswwwからnon-wwwへのリダイレクトを追加しました。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_Host} ^www\.
    RewriteCond %{HTTPS}s ^on(s)|off
    RewriteCond http%1://%{HTTP_Host} ^(https?://)(www\.)?(.+)$
    RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
</IfModule>`

ドメインにアクセスすると、問題なく次のようなリダイレクトが行われます。

http://www.example.com     → http://example.com
http://www.example.com/abc → http://example.com/abc

しかし、私が自分のドメインにhttps://www.example.comまたはhttps://www.example.com/absとしてアクセスしても、自分のドメインはリダイレクトされず、エラーコードが表示されます。SSL_ERROR_INTERNAL_ERROR_ALERT(Firefoxの場合)またはERR_SSL_PROTOCOL_ERROR(Chromeの場合)

私はWordPressとプラグインReally Simple SSLを使用しました。

私のエラーを修正する方法について何かアイデアは?

4
DinhTv

私があなたにコードを与える前に、いくつかのポイントを説明させてください。

ポイント1:

httpsリンクのみを許可した方が良いでしょう。同じ内容にhttphttpsを混在させるセキュリティを破るhttpsで追加。 httpを使うと、あなたの訪問者があなたがあなたのサーバーから提供しているのと同じページが表示されることを確実にすることはできません。

ポイント2:

検索エンジンは、たとえドメインが同じであっても、httphttpsサイトは異なるサイトであると見なします。正しく設定されていないと、重複したペナルティを受ける可能性があります。ですから、httpsをいっそう良くするためにSEOにすることをお勧めします。

ポイント3:

適切な.htaccess CODEがあっても、SSLが正しく設定されていないと同じエラーになるかもしれません。 .htaccess CODEを変更した後は、標準に対してSSL設定をテストすることをお勧めします。 this のようなツールを使うことができます。

推奨コード

上記の点に基づいて、使用できるコードは次のとおりです。

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTPS}        =off   [OR]
    RewriteCond %{HTTP_Host}    !^example\.com$
    RewriteRule ^(.*)$          "https://example.com/$1" [R=301,L]

    # remaining htaccess mod_rewrite CODE for WordPress
</IfModule>

これにより、次の例のリダイレクトが行われます。

http://www.example.com/     → https://example.com/
http://www.example.com/abc  → https://example.com/abc
https://www.example.com/    → https://example.com/
https://www.example.com/abc → https://example.com/abc

# Additionally, even if your site is reachable by IP or
# some other domains or subdomains, this CODE will fix that too
http://Your_Server_IP/abc          → https://example.com/abc
http://sub-dmoani.example.com/abc  → https://example.com/abc
http://www.other-domain.com/abc    → https://example.com/abc

非推奨コード

何らかの理由で、上記の推奨に従わず、httphttpsの両方を許可したい場合は、( この回答に基づいて )次のCODEを使用できます。

<IfModule mod_rewrite.c>
    RewriteEngine On

    # set protocol variable
    RewriteCond %{HTTPS} =on
    RewriteRule ^(.*)$ - [env=proto:https]
    RewriteCond %{HTTPS} =off
    RewriteRule ^(.*)$ - [env=proto:http]

    RewriteCond %{HTTP_Host} !^example\.com$
    RewriteRule ^(.*)$       "%{ENV:proto}://example.com/$1" [R=301,L]

    # remaining htaccess mod_rewrite CODE for WordPress
</IfModule>

これにより、次の例のリダイレクトが行われます。

http://www.example.com/     → http://example.com/
http://www.example.com/abc  → http://example.com/abc

https://www.example.com/    → https://example.com/
https://www.example.com/abc → https://example.com/abc
7
Fayaz