htaccess force https ne fonctionne pas s'il n'y a pas d'URI

Oct 03 2020

Je n'ai jamais travaillé avec Apache, donc je suis complètement novice.

J'ai un compte multihébergement sur un site Web de fournisseur, où 3 domaines sont utilisés. Je veux forcer la connexion https sur un domaine, disons example.com, qui n'est pas le domaine principal du plan d'hébergement. Ce que j'ai fait, c'est d'ajouter un .htaccessfichier dans le chemin examplecom/public_html, le dossier où se trouvent tous les fichiers du site. Dans le .htaccessJ'ai copié-collé ces chaînes du guide du fournisseur:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]

Le site Web fonctionne correctement si je vais sur une page avec un URI non vide, mais ce n'est pas le cas sur la page principale. Par exemple: http://example.com/anypageest correctement redirigé vers https://www.example.com/anypage, tandis que http://example.com/est redirigé vers https://www.example.com/public_html, et ne comprend pas pourquoi.

Réponses

3 MrWhite Oct 03 2020 at 07:24

Il semble que vous ayez un conflit avec les directives existantes, cependant, vous pouvez essayer de modifier vos directives existantes pour voir si cela fait une différence:

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com/$1 [L,R=301]

Si le .htaccessfichier est situé dans le examplecom/public_htmlrépertoire, la référence arrière capturée ( $1) ne doit contenir que tout ce qui suit (le cas échéant). Alors que la REQUEST_URIvariable serveur contient toujours le chemin URL complet.

La RewriteBasedirective est ici superflue puisque vous utilisez une URL absolue dans la RewriteRule substitution .

Vous devrez vider le cache de votre navigateur avant de tester car le 301 erroné aura probablement été mis en cache. Testez avec 302 redirections (temporaires) pour éviter les problèmes de mise en cache.