Apache mod_rewrite – Redirection vers HTTPS sauf une URL conviviale (Controller)

J’ai un site Web qui doit forcer HTTPS sauf lorsqu’une URL particulière commence par un modèle.

Le problème est que j’ai une redirection vers index.php pour charger un contrôleur PHP dans mon système. Lorsqu’il redirige vers index.php, les règles de réécriture sont appliquées à nouveau, mais% {REQUEST_URI} devient index.php après que la redirection et l’URL pouvant utiliser http sont redirigées vers https.

Y a-t-il un moyen de contourner cela? Peut-être ne pas lire les règles à nouveau après la redirection interne ou conserver REQUEST_URI identique.

RewriteEngine On RewriteCond %{REQUEST_URI} !^/ok_with_http RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php [QSA,L] 

%{THE_REQUEST} pourrait être utilisé à la place de %{REQUEST_URI} pour tester la demande d’origine même après une redirection interne vers index.php .

Selon le manuel:

LA DEMANDE

La ligne de requête HTTP complète envoyée par le navigateur au serveur (par exemple, GET /index.html HTTP/1.1 ). Cela n’inclut pas les en-têtes supplémentaires envoyés par le navigateur. Cette valeur n’a pas été décodée, contrairement à la plupart des autres variables ci-dessous.

 RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{THE_REQUEST} !^[AZ]+\ /ok_with_http(/\S*)?\s RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php [QSA,L] 

Voir la réponse que j’ai utilisée comme référence.