Aller au contenu

Sujets conseillés

Posté

Bonsoir,

jusqu'ici j'utilisais la règle ci-dessous pour rediriger mes fichiers vers une page php.

RewriteRule Fichiers/(.*)/(.*) /Fichiers/check_connect.php?dossier=$1&url=$2 [QSA,L,R=301]

Un appel de monsite.com/Fichiers/Documents/fichier.doc est donc redirigé vers monsite.com/Fichiers/check_connect.php?dossier=Documents&url=fichier.doc

 

Mon problème c'est que ce système ne gère pas les sous-dossier

Je souhaiterai savoir s'il est possible de transformer le chemin d'un fichier en variable ?

 

Par exemple  

monsite.com/Fichiers/Documents/Sous-Dossier/fichier.doc devrait être redirigé vers monsite.com/Fichiers/check_connect.php?dossier=Documents/Sous-Dossier&url=fichier.doc

monsite.com/Fichiers/Documents/Sous-Dossier/Sous-Dossier/fichier.doc devrait être redirigé vers monsite.com/Fichiers/check_connect.php?dossier=Documents/Sous-Dossier/Sous-Dossier/&url=fichier.doc

 

Il faut préciser que je ne connais ni le nom des dossiers, ni leur nombre ni leur profondeur (combien de sous-dossier)

 

Auriez-vous une idée de comment faire ça avec une redirection htaccess et si c'est seulement possible ?

 

Merci d'avance

Posté

Quelque-chose comme ceci :

RewriteRule Fichiers/(.*)/([^/]*) /Fichiers/check_connect.php?dossier=$1&url=$2 [L]

La valeur [^/]* du second argument donnera un match pour toute chaîne ne comprenant pas de '/'

Précédé d'un / dans l'expression pour isoler le dernier mot, cela devrait donc te donner la valeur de la variable url.

Le premier argument prendra tout le début de la chaîne, donc la valeur de la variable dossier.

 

C'est non testé, mais on ne devrait pas être loin de la vérité !

 

Attention au R=301, qui va forcer de re-passer dans le fichier .htaccess .... pas top, et inutile !

Ce n'est pas l'expression /check_connect.php?dossier=Documents/Sous-Dossier/Sous-Dossier/&url=fichier.doc  que tu veux voir indexer par les moteurs.

Le flag QSA est inutile aussi vu que c'est ta règle qui génère le QUERY_STRING ! Il ne doit donc pas être ajouté automatiquement.

 

Comme flag, je mettrais seulement [L]

 

 

Posté

Ce n'est pas utile dans ton cas. Tu n'as pas besoin de récursivité, vu que tu mets toute la chaine à part le nom du fichier dans une seule variable.

 

Je viens de tester, l'exemple donné plus haut fonctionne parfaitement ;)

 

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...