web-dev-qa-db-fra.com

htaccess https redirige de www à non-www

J'ai ajouté .htaccesshttps redirect de www à non-www avec:

<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>`

Lorsque je visite mon domaine, les redirections suivantes se font sans problème:

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

Mais lorsque je visite mon domaine en tant que https://www.example.com ou https://www.example.com/abs, mon domaine ne redirige pas et affiche le code d'erreur: SSL_ERROR_INTERNAL_ERROR_ALERT (dans Firefox) ou ERR_SSL_PROTOCOL_ERROR (dans Chrome).

J'ai utilisé WordPress et le plugin Really Simple SSL.

Une idée sur la façon de réparer mon erreur?

4
DinhTv

Avant de vous donner le code, laissez-moi vous expliquer quelques points:

Point 1:

Il est préférable de n'autoriser que les liens https. Mélanger http & https pour le même contenurompt la sécuritéajouté par https. Avec http, vous ne pouvez jamais être sûr que la même page s'affiche sur vos visiteurs depuis votre serveur.

Point 2:

Les moteurs de recherche considèrent les sites http & https comme des sites différents, même lorsque le domaine est identique. Donc, s'il n'est pas configuré correctement, vous risquez d'obtenir une pénalité en double. Il est donc recommandé d’utiliser https jusqu’au mieuxSEOaussi.

Point 3:

Même avec le code .htaccess approprié, vous pouvez obtenir la même erreur si SSL n’est pas configuré correctement. Ainsi, après avoir modifié le code .htaccess, il est préférable de tester votre configuration SSL par rapport aux normes. Vous pouvez utiliser un outil tel que this .

CODE recommandé:

En fonction des points ci-dessus, voici le code que vous pouvez utiliser:

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

Cela fera les exemples de redirections suivants:

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

Non recommandé CODE:

Si, pour une raison quelconque, vous ne souhaitez pas suivre la recommandation ci-dessus et que vous souhaitez tout de même autoriser http et https, vous pouvez utiliser le CODE suivant (basé sur cette réponse ):

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

Cela fera les exemples de redirections suivants:

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