Salut à tous,
Sur la plateforme dont je m'occupe nous devons discuter avec des imprimantes (via JS). Celles-ci ne supportent pas le protocole HTTPS. Ainsi, je souhaite passer par le protocole HTTP sur une seule des urls de la plateforme.
J'ai donc mis en place un fichier .htaccess qui permet de forcer le HTTPS pour toutes les pages sauf les urls de type http://mondomain.com/ws/070815yU7HrioUQQ97/default-version/epos/*
Voici le fichier .htaccess :
Options +FollowSymlinks
DirectoryIndex routes.php
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !/epos(.*)
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(fids|epos|monitor|dashboard|invitations) routes.php [QSA,L]
RewriteRule ^home$ connexion.php [L]
RewriteRule ^connexion(.*)$ connexion$1 [L]
RewriteRule ^Documents(.*)$ Documents$1 [L]
Du coup :
- pour toutes les urls http on passe bien en https
- pour les urls de type http://mondomain.com/ws/070815yU7HrioUQQ97/default-version/epos/* l'url est transformée en : http://mondomain.com/ws/070815yU7HrioUQQ97/default-version/routes.php ce qui lance le script route.php.
L'objectif est le suivant : obtenir une url http://mondomain.com/ws/070815yU7HrioUQQ97/default-version/epos/* et que ce soit le script routes.php qui soit lancé (il s'agit du router).
Merci d'avance.
Htaccess : forcer HTTPS sauf pour une url
Sujets apparentés
- [RESOLU] Server unable to read htaccess file, denying access to be safe
25817
24.11.2019 19:11
- Version php 7.0 sur Ovh mais php 5.4.45 sur mon wordpress
22989
10.01.2019 11:14
- Comment récupérer son mot de passe phpmyadmin ?
19981
14.11.2016 10:32
- Changer la version d'une base de donnée en mutualisé
19819
22.12.2016 11:46
- Variable upload_max_filesize plus grande que post_max_size
19767
11.06.2017 16:01
- Résiliation hébergement+domaine
15459
11.09.2018 20:28
- Résiliation hébergement
14631
27.07.2018 10:39
- Transfert hebergement et domaine .fr entre client OVH ?
13851
21.12.2016 15:10
- Ne supporte pas FTP sur TLS
13794
11.12.2018 18:48
- Nouvelle fonctionnalité : SFTP pour tous
13482
06.01.2017 14:50
Personne n'a une idée ?
Bonjour,
Je ne maîtrise pas cette syntaxe, j'ai toujours du mal, mais je te donne juste une indiction: le "[L]" signifie last (dernier), peut-être qu'en ne le mettant pas , quelque part, ça pourrait marcher. Mais bon ce n'est pas très bon comme méthode , genre "et si on fait ça, qu'est-ce que ça fait?", mais fais juste 2 ou 3 essais.
ha... psq dans la doc je vois : Considère la chaîne_de_test comme un chemin et vérifie son existence et si elle est un lien symbolique. On peut aussi utiliser la convention bash -L ou -h lorsqu'il y a risque de confusion avec les tests -lt ou -le.
Du coup je t'avoue que je ne sais pas se que ca veut vraiment dire
En fait il n'y a pas vraiment de question..
Sinon je crois que ça a été vu par le passé mais je n'arrive pas à retrouver le sujet.
Je m’en suis sûrement mal exprimé :/
Je savais que ça n’allais pas être facile à expliquer ^^
La question est la suivante : comment est ce que j’en leux faire pour forcer le https sur toutes les pages, sauf sur celles */épos/*
Et du coup, pourquoi lorsque je mets en place ce fichier htaccess ci dessus, ça me renvoie vers routes.php ?
Merci pour vos reponses
J'utilise cela pour ma part :
RewriteCond %{REQUEST_URI} !^/ws/070815yU7HrioUQQ97/default-version/epos/
ou peut être simplement
RewriteCond %{REQUEST_URI} !/epos/
Je viens de faire le test et ca me redirige vers ws/070815yU7HrioUQQ97/default-version/routes.php :/
Vous n'auriez pas un problème dans le chemin que vous appelez ?
Car en gros, si vous appelez un fichier ou un dossier qui n'existe pas, ça renvoie vers routes.php, mais on ne sait pas trop à quel niveau du chemin
Votre logique ne va pas dans ce dernier bloc.
^ veut dire qui commence par
votre url ne commence pas par epos
Décomposez plus simplement pour tester :
RewriteCond %{REQUEST_URI} !^/ws/070815yU7HrioUQQ97/default-version/epos/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /ws/070815yU7HrioUQQ97/default-version/epos/routes.php [L]
Merci pour tes réponses !!
Petites précisions supplémentaires :
* le script que je désire appeler est situé dans le répertoire ws/070815yU7HrioUQQ97/default-version/ qui existe bien
- le fichier .htaccess est situé dans ce même répertoire
- le /epos/test correspond à une route (qui doit être interprété dans le script situé dans routes.php), donc le fichier n'existe pas mais il faut que ce soit le script routes.php qui soit lancé
Nan parce que lorsque je commente la partie redirection HTTPS, l'url fonctionne correctement.
Ca me renvoie toujours vers routes.php
Alors, je n'ai pas compris ce que vous vouliez faire.
Sur le premier post, il faut bien rediriger vers /routes.php
Je crois qu'il faut repartir de 0 (au moins pour moi LOL), histoire d'oublier tout ce qui a été dit avant.
Vous pouvez refaire votre demande, avec des exemples précis ?
1/ le comportement normal du site
2/ le comportement spécial pour votre imprimante
^^ oauip je me doutais que ce serait difficile à expliquer.
Alors dans un premier temps voici l'arborescence des répertoires :
_www > preprod > ws > 070815yU7HrioUQQ97 > default-version_
Et voici la situation :
Pour accéder à la plateforme j'utilise cette url : https://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/[une_route]
où [une_route] correspond à la page à afficher et le sous répertorie racine du sous domaine preprod est _www > preprod
Dans le répertoire ws/070815yU7HrioUQQ97/default-version il y a un fichier nommé routes.php, qui joue le rôle de router. Ainsi, chaque requête HTTP doivent exécuter ce script.
J'ai donc placé un fichier .htaccess dans le répertorie ws/070815yU7HrioUQQ97/default-version avec de l'url rewriting :
Exemple : une requête vers https://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/fids exécute le script routes.php pour afficher la page correspondant aux programmes de fidélités...
Jusqu'à présent je voulais forcer toutes les requêtes en HTTPS. Du coup, j'ai ajouté dans le fichier .htaccess :
Et ça fonctionne bien, exemple : une requête vers http://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/fids, me renvoie vers https://preprod.mondomaine.com/.../fids
Aujourd'hui j'utilise des imprimantes Epson. Pour communiquer avec elles, il faut passer par du js. Malheureusement, le SSL n'est pas supporté :/
De plus, lorsqu'en js on effectue une requête depuis une page HTTPS vers HTTP, le navigateur bloque (notamment sous iOS). Exemple : je suis sur la page https://preprod.mondomaine.com/.../fids et j'ouvre une connexion en js vers http://192.168.0.1/... le navigateur m'envoie bouler.
Pour palier à cela j'ai donc décidé de créer une page qui serai accessible uniquement depuis HTTP et qui exécuterai le script JS pour lancer les impressions. Cette page à pour url : http://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/epos/test
Pour qu'elle reste sur le protocole http il faut donc ajouter une condition d'exclusion sur la partie "on force le HTTPS" dans le fichier htaccess.
Et c'est la où ça bloque !
Voici ce qu'il se passe :
* Quand je vais sur n'importe quelle page **http**://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/[une_route] il me redirige vers **https**://preprod.mondomaine.com/.../[une_route] => comportement OK
* Quand je vais vers **http**://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/epos/test il me redirige vers **https**://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/routes.php => NON OK
Comportement voulu :
* Quand je vais vers **http**://preprod.mondomaine.com/ws/070815yU7HrioUQQ97/default-version/epos/test il reste sur cette url et il execute le script routes.php comme pour les autres url
Bon, ça n'est pas super clair dans ma tête !
Ok, ça, ça redirige tout ce qui n'est pas /epos, sur le bon chemin.
Il reste donc à rediriger ce qui est /epos, sur le bon chemin non ?
RewriteCond %{REQUEST_URI} /epos(.*)
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Effectivement j'ai essayé ça, mais sans succès : impossible de charger la page. J'ai l'impression qu'il fait une boucle infinie du coup
Bonjour,
Je ne peux pas trop vous dire comment faire car je en maîtrise pas trop cette syntaxe, mais en revanche je peux vous donner un conseil sur la marche à suivre:
- mettre la règle de réécriture de l'url utilisée pour les imprimantes en dur, sans aucune wild-card (pppplus t'expliquera ce que c'est qu'une wild-card), et ne pas mettre [L] pour cette règle,
- mettre ensuite la règle de réécriture générale avec les wild-cards, et mettre le [L] à la fin de cette règle.
Dans la première règle on va mettre http, alors que dans la deuxième on mettra https. En gros il faudrait que lorsque la première règle a marché, il (la machine) n'essaie pas d’exécuter la deuxième, qu'il n’exécute la deuxième que si la première n'a pas marché: d'où l'absence ou la présence du [L] (c'est là que je ne maîtrise pas la syntaxe, mais c'est le principe).
Voila, j'espère que cela pourra vous aider.