web-dev-qa-db-fra.com

Comment écrire .htaccess pour que https soit activé uniquement pour les sous-pages mais pas pour la page d'accueil

La racine de mon domaine redirige avec succès vers un sous-répertoire, ce qui signifie que example.com redirige vers example.com/abc.

example.com n'a pas d'installation WordPress.

example.com/abc a sa propre installation WordPress.

La page d'accueil sur http://example.com/abc n'est pas HTTPS et je ne le souhaite pas. Cependant, je souhaite que toutes les sous-pages soient HTTPS (par exemple, https://example.com/abc/xyz ou https://example.com/abc/thistoo).

Mon fichier .htaccess actuel correspond au contenu standard de WordPress ...

# BEGIN WordPress

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

# END WordPress

J'ai vérifié et essayé de nombreuses autres solutions que j'ai trouvées ici mais jusqu'à présent pas de joie.

p.s. Je sais ré-enregistrer permaliens après avoir apporté de telles modifications au fichier .htaccess.

1
au_Martin

Votre fichier .htaccess se trouve probablement dans le sous-répertoire /abc? Dans ce cas, vous pouvez utiliser l'une des méthodes suivantes pour forcer HTTPS sur toutes les sous-pages, à l'exception de la page d'accueil:

Cela doit aller tout en haut de votre fichier .htaccess:

RewriteCond %{HTTPS} !on
RewriteRule !^(index\.php)?$ https://example.com%{REQUEST_URI} [R=302,L]

Cela suppose que le certificat SSL est installé directement sur votre serveur d'applications.

Le modèle négatif RewriteRule!^(index\.php)?$ ne correspond qu'à un non-vide (ou non index.php ) URL-path, donc cela exclut la page d'accueil.

Modifiez le 302 (temporaire) en 301 (permanent) uniquement lorsque vous êtes sûr que tout fonctionne correctement pour éviter les problèmes de mise en cache. Effacez le cache de votre navigateur avant de le tester.


De plus:

RewriteBase /abc/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /abc/index.php [L]

Puisque vous avez défini la directive RewriteBase, vous pouvez supprimer le préfixe de répertoire de la substitution RewriteRule (c'est ce que fait la directive RewriteBase):

RewriteRule . index.php [L]

Cependant, étant donné que votre fichier .htaccess se trouve dans le sous-répertoire /abc, vous n'avez donc pas besoin de la directive RewriteBase ni du préfixe de répertoire.

0
MrWhite