En fait, le rôle de ce .htaccess est de renvoyer toutes les urls de l'arborescence vers le script lui-même. On utilise donc l'URL Rewriting, c'est un module d'apache qui permet de réécrire les urls qui arrivent à ton serveur.Bonjour Sékiltoyai et merci pour ta réponse...
Bon, là...Pour la propagation, tu peux essayer de faire un .htaccess dans le répertoire du script :Code : Tout sélectionner
rewriteengine On rewriterule ^index.php(.*) index.php$1 [L] rewriterule ^(.*) index.php?path=$1 [L]... va falloir m'expliquer un peu tout ça, parece que, en matière de ".htaccess", je suis... comment dire... je suis un parfait ignare
![]()
Si tu avais un moment, je voudrais bien connaître le rôle de ce bout de code et, si possible, comprendre un peu sa syntaxe... parce que là... j'y pige nada
Merci à toi... à+
<?php
echo $_SERVER['QUERY_STRING'];
?>
Donc ca a l'air de marcher.Code : Tout sélectionner
rewriteengine On
rewriterule ^(.*) chemin_vers_ton_script/index.php?path=$1 [L]Code : Tout sélectionner
/
|-> script/
| |-> dirlist.php
|-> web_ftp/
| |-> .htaccess
| |-> dossier1/
| |-> dossier2/Code : Tout sélectionner
rewriteengine On
rewriterule ^(.*) ../script/dirlist.php?path=$1 [L]Code : Tout sélectionner
rewriteengine On
rewriterule ^(.*) http://domain.tld/script/dirlist.php?path=$1 [L]
Pour que lorsque tu fais http://domain.tld/path/ , il ne te liste pas le répertoire avec le handler par défaut de apache mais qu'il appelle le script, d'où la nécessité de copier récursivement pour profiter des index…Pourquoi ton script se copie-t-il à travers toute l'arborescence ??
Avais-tu vraiment besoin de ça ?
Wouw ! ça c'est de l'explication ! ... merci beaucoupEn fait, le rôle de ce .htaccess est de renvoyer toutes les urls de l'arborescence vers le script lui-même. On utilise donc l'URL Rewriting, c'est un module d'apache qui permet de réécrire les urls qui arrivent à ton serveur.Code : Tout sélectionner
rewriteengine On rewriterule ^index.php(.*) index.php$1 [L] rewriterule ^(.*) index.php?path=$1 [L]
La première ligne du .htaccess sert à activer l'url rewriting. La seconde sert à protéger ton index.php, car apache appele l'url rewriting une fois, effectue la redirection, et l'appele une nouvelle fois, on protège ainsi ton script d'une éventuelle index.php?path=index.php?path=chemin_reel/fichier_reel.png et on permet d'appeler le script directement par son adresse. La troisième ligne effectue la réécriture en elle-même, à savoir qu'il redirige toute l'url vers ton script de cette manière :
URL de départ : /root/chemin_a_ton_htaccess/chemin_a_ton_fichier/fichier.txt
URL d'arrivée : /root/chemin_a_ton_htaccess/index.php?path=chemin_a_ton_fichier/fichier.txt
N'ayant jamais vraiment fait de rewriting auparavant, j'ai tout de même tenu à tester :
Mon url de départ était : http://localhost/test_rewrite/dossier1/image.png
Et à l'arrivée, j'obtiens path=/dossier1/image.png
Avec ce index.php :Donc ca a l'air de marcher.<?php echo $_SERVER['QUERY_STRING']; ?>
Code : Tout sélectionner
monsite/
.htaccess
dirlist.php
index.html
pages/
blog/
index.php
images/
logo.jpg
page1.html
page2.html
etc
Oui, tu n'a pas tort, mais il y a désormais suffisament de sources d'infos sur internet pour au moins faire ces premiers pas... voici un lien qui t'en donnera un certain nombre (certains liens sont morts, mais dans l'ensemble tu trouveras certainement ton bonheurSinon sur l'AppleScript, personnellement je n'ai jamais vraiment réussir à faire ce que je voulais avec…
Je trouve la doc vraiment pauvre :-/
C'est surtout une référence du langage et de toutes les fonctions qu'il me faudrait…il y a désormais suffisament de sources d'infos sur internet pour au moins faire ces premiers pas...
La documentation de référence se trouve ici : AppleScript Fundamentals (en)C'est surtout une référence du langage et de toutes les fonctions qu'il me faudrait…il y a désormais suffisament de sources d'infos sur internet pour au moins faire ces premiers pas...
OuiDonc, si je comprends bien le principe, il s'agit de demander au server, grace au fichier ".htaccess", d'attraper au vol toutes les requettes Url et les diriger directement vers le script, en mettant le chemin d'accès relatif demandé dans une variable Url... ce que le script doit récupérer à son tour pour construire la liste d'éléments dans le dossier demandé... c'est ça ou j'ai loupé une marche ?
Tu peux faire un script d'installation ou une administration dans laquelle tu choisis les dossiers à inclure ou exclure et qui génère le .htaccess à la racine de l'arborescence à parcourir.Ok, si c'est ça, alors je dois distribuer le script avec ce fichier ".htaccess", ou alors imaginer une fonction dans le script qui le créerait automatiquement (si c'est possible bien-sûr)... ton idée est vraiment séduisante... =D>
Comme j'ai supprimé le index.php tout à l'heure. A savoir que la dernière règle est la règle de réécriture réelle, et juste avant, il y avait une règle pour exclure le index.php.Maintenant, comment résoudre la siutation où dans les dossiers à lister existent des fichiers à visualiser, qui n'ont pas à être rédirigés vers le script ?
Par exemple, j'ai une arborescence de ce type :
Donc, si je demande "www.monsite.fr/pages/", d'accord, je veux bien que ce repertoire soit listé par défaut par le script "DirList", du coup la rédirection du fichier ".htaccess" serait OK !Code : Tout sélectionner
monsite/ .htaccess dirlist.php index.html pages/ blog/ index.php images/ logo.jpg page1.html page2.html etc
De même, si je demande "www.monsite.fr/pages/images/", là aussi, je trouve bien que le script soit appelé pour lister ce sous-dossier...
Mais, qu'en est il si je demande "www.monsite.fr/pages/blog/" ou "www.monsite.fr/pages/blog/index.php" ?![]()
Là il ne faudrait pas que la redirection passe par le script "DirList", il faut que le fichier "indix.php" du blog puisse s'afficher normalement... non ?![]()
Code : Tout sélectionner
rewriteengine On
rewriterule ^index.php(.*) index.php$1 [L]
rewriterule ^pages/blog/(.*) pages/blog/$1 [L]
rewriterule ^(.*) index.php?path=$1 [L]L'important, ce n'est pas tant la position de ton script que la position et les règles définis dans ton .htaccess, dans la mesure où c'est ton .htaccess et lui seul qui définit l'arborescence, c'est à dire que toutes les requètes qui sont dans l'arborescence définie par ton .htaccess seront renvoyées vers ton script, et les autres non. La position de ton script n'a donc aucune importance stratégique, tant qu'il est capable lui même de lister les dossiers.Quant à la possibilité des lister des répertoires en déhors de l'arborescence où se trouve le script, je ne sais pas si c'est une bonne idée, je m'interroge vraiment sur la pertinance d'un tel choix... je ne sais pas, tu aurais un avis sur la question ?
En fait, sur la version de "DirList" de dév. que j'ai chez moi, j'ai fais le choix de ne jamais lister les répertoires qui se trouvent "au dessus" du script, autrement dit, le script ne ferait que parcourir et lister l'arborescence des dossier uniquement en descendant dans la hiérarchie à partir du répertoire où il se trouve, jamais en la remontant...
Je ne sais pas si c'est un "bon" choix, mais il m'est paru important de fixer une limite en guise de frontière de sécurité... à voir...
Oui, en effet, j'ai déjà commencé à faire une petite page d'administration, je pourrais ajouter cette fonctionnalité... quant à faire un script d'installe, même si l'idée est certainement à creuser, ça me paraît un peu trop pour l'instant pour un petit projet de ce type...Tu peux faire un script d'installation ou une administration dans laquelle tu choisis les dossiers à inclure ou exclure et qui génère le .htaccess à la racine de l'arborescence à parcourir.Ok, si c'est ça, alors je dois distribuer le script avec ce fichier ".htaccess", ou alors imaginer une fonction dans le script qui le créerait automatiquement (si c'est possible bien-sûr)... ton idée est vraiment séduisante... =D>
Merci pour toutes ces infos, qui m'ont permis de comprendre, en plus, que la syntaxe de ces lignes n'est après tout que des "simples" rechercher/remplacer à la sauce "expressions régulières", ce que je n'avais pas bien compris précédemment... c'est vraiment nickel tes explications, Merci !Comme j'ai supprimé le index.php tout à l'heure. A savoir que la dernière règle est la règle de réécriture réelle, et juste avant, il y avait une règle pour exclure le index.php.Maintenant, comment résoudre la siutation où dans les dossiers à lister existent des fichiers à visualiser, qui n'ont pas à être rédirigés vers le script ?
...
Dans ton cas :Lors de la lecture, si tu demandes pages/blog/index.php apache exécute la première ligne, il démarre le mécanisme de réécriture, ensuite, la deuxième ligne, il ne réécrit rien car l'expression régulière ne correspond pas à ton url, la troisième ligne, il trouve une concordance et réécrit l'url en pages/blog/index.php (donc laisse tel quel), et vu que je lui ai mis le flag [L], il s'arrête là et n'exécute pas la dernière règle. Tu as exclu ta sous arborescence de l'arborescence du script.Code : Tout sélectionner
rewriteengine On rewriterule ^index.php(.*) index.php$1 [L] rewriterule ^pages/blog/(.*) pages/blog/$1 [L] rewriterule ^(.*) index.php?path=$1 [L]
En effet, ton analyse est pertinante, ceci dit, dans un site où la hiérarchie des dossiers et fichiers est amenée à changer plus ou moins régulièrement, il faudra donc être attentif pour mettre à jour les différents régles dans tous les ".htaccess" concernés, ce qu'implique une maintenance pas toujours évidente à tenir, surtout pour ceux qui ne sont pas habitués aux subtilités du langage utilisé...L'important, ce n'est pas tant la position de ton script que la position et les règles définis dans ton .htaccess, dans la mesure où c'est ton .htaccess et lui seul qui définit l'arborescence, c'est à dire que toutes les requètes qui sont dans l'arborescence définie par ton .htaccess seront renvoyées vers ton script, et les autres non. La position de ton script n'a donc aucune importance stratégique, tant qu'il est capable lui même de lister les dossiers.Quant à la possibilité des lister des répertoires en déhors de l'arborescence où se trouve le script, je ne sais pas si c'est une bonne idée, je m'interroge vraiment sur la pertinance d'un tel choix... je ne sais pas, tu aurais un avis sur la question ?
...
Par contre, il est vrai que si tu places ton script dans un autre dossier que la racine de l'arborescence à traiter, tu devras d'une part générer un .htaccess adéquat pour que les bonnes url soient réécrites, et d'autre part enregistrer la configuration de manière à ce que ton script traite l'arborescence réelle et non l'arborescence qui est sous lui, et aussi de manière à ce qu'un malin ne s'amuse pas à bluffer le script en l'appelant directement par dirlist.php?path=chemin_interdit/
Mais l'avantage de dissocier le script de l'arborescence c'est que tu marques la différence entre les deux, et tu t'assures que on ne puisse absolument pas lister ton fichier.
Ok, c'est à dire que seuls les serveurs tournant sous Apache savent gérer les fichiers de type ".htaccess"... c'est bien ça ?Cependant, il faut être conscient que si tu adoptes la solution du .htaccess, tu auras un script puissant, mais utilisable exclusivement sur un serveur apache…
Voilà tout à fait.Ok, c'est à dire que seuls les serveurs tournant sous Apache savent gérer les fichiers de type ".htaccess"... c'est bien ça ?
Si c'est le cas, alors, à ton avis, celà est trop pénalisant ou pas ?
Autrement dit, selon toi, à la louche, quelle proportion de serveurs tournet sous Apache ?
Car s'il n'y a qu'une très faible proportion, ça veut alors dire que le script à la mode ".htaccess" concernera finalement que peu de personnes... non ?
Ok, je suis plutôt rassuré, mais il va falloir quand-même que j'introduise un petit test dans les script pour s'assurer que le serveur dans lequel il tourne est bien de type Apache et que le "rewrating" est bien activé... et dans le cas contraire soit avertir l'utilisateur que le script ne peut pas tourner efficacement ou trouver une technique pour adapter son fonctionnement selon le contexte... bref, faut que je creuse la question...Mais ce n'est pas trop pénalisant vu que la majorité ( dans les 70% ) des serveurs utilisent apache, et la plupart d'entre eux autorisent le rewriting, donc tu touches encore la majeure partie des gens.Autrement dit, selon toi, à la louche, quelle proportion de serveurs tournet sous Apache ?
Je te disais ça surtout pour que tu sois conscient que ce script ne tournera pas sur IIS…
Code : Tout sélectionner
RewriteEngine On
RewriteRule ^/dirlist/test.dirlist ./dirlist/test.txt
(...)<?php
(...)
function test_rewrite()
{
$handle = fopen('http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . 'test.dirlist', 'r');
$ret = (fread($handle, 5)=='test');
fclose($handle);
return $ret;
}
(...)
?>
Après tu adaptes à ta sauce…Très très astucieux d'utiliser la fonction même de "rewrating" sur une requête "bidon" afin de vérifier si ça fonctionne... pas mal !Sinon tu peux te faire ceci :
[...]
Après tu adaptes à ta sauce…
function f_rw_test() {
session_start();
list($theHtaccess, $theScript, $rwOk) = array('.htaccess', basename(__FILE__), 0);
if (isset($_SESSION['rwok']) && $_SESSION['rwok']) {
$rwOk = 1;
} elseif (isset($_GET['rwtest']) && $_GET['rwtest']) {
$_SESSION['rwok'] = 1;
$rwOk = 1;
} elseif (file_exists($theHtaccess)) {
header("Location: $theScript");
} else {
$theRewriteTest = "RewriteEngine on
RewriteRule $theScript $theScript?rwtest=1 [L]";
$ok = f_write_file($theHtaccess, $theRewriteTest);
header("Location: $theScript");
}
return $rwOk;
}
Bon, pour l'instant ce code mémorise l'activation du "rewraiting" dans une variable de session, mais dans le script final cette info sera sauvegardée dans un fichier de configuration, qui de toutes manières sera nécessaire pour enregistrer les différents paramétrages du script...