web-dev-qa-db-fra.com

Les règles .htaccess de RewriteEngine finissent par être redirigées vers example.net/https:/example.net

Je commence à apprendre Apache .htaccess et j'ai des problèmes avec mon site web ...

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

RewriteCond %{HTTP_Host} ^example$ [NC,OR]
RewriteCond %{HTTP_Host} ^www.example.net$
RewriteCond %{REQUEST_URI} !myfolder-public/
RewriteRule (.*) /myfolder-public/$1 [L]

La seconde RewriteRule existe parce que j'ai besoin d'un dossier différent (appelé myfolder-public) pour rediriger mon domaine, mais lorsque je mets ceci sur un navigateur Web: example.com sans HTTPS, la page est redirigée vers: example.net/https:/example.net et je ne sais pas comment résoudre ce problème, aucune aide?

RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

C'est probablement parce qu'il vous manque l'indicateur L (Last) de la directive de redirection. Il devrait lire:

RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

(En outre, inutile de capturer le motif(.*) si vous n'utilisez pas de référence arrière dans le substitution.)

Sans l'indicateur L, le traitement se poursuit dans le fichier et il semble qu'il soit éventuellement intercepté par votre réécriture ultérieure. Mais la directive précédente avait déjà défini le statut 3xx et finissait donc par réécrire l'URL, puis par la redirection.

Bien que je pense que quelque chose se soit perdu dans votre exemple, vous avez basculé entre les domaines .com et .net? Vous manquez le TLD de la première condition de votre réécriture et où est passé le /myfolder-public dans la redirection erronée?

1
MrWhite