IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

htaccess redirection d'une URL vers /dossier/URI


Sujet :

Apache

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 26
    Points : 12
    Points
    12
    Par défaut htaccess redirection d'une URL vers /dossier/URI
    Bonjour,
    Je cherche à faire une redirection d'URL en htaccess, afin de renvoyer vers un dossier qui contient le fichier.
    Je m'explique : je n'ai pas envie d'avoir l'adresse https://monsite.fr/dossier/fichier.php, mais plutôt l'adresse https://monsite.fr/fichier.php.

    Pour pouvoir faire ça, je compte donc passer par le htaccess, et rediriger ces adresses vers le dossier.

    mon code actuel ne fonctionne, mais supprime toute mise en page CSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	## Rediriger les liens vers le dossier
    	## Rediriger les liens vers le dossier si ce n'est aucun des fichier suivant.
    RewriteCond "%{THE_REQUEST}" "!^GET.*index\.php"         [NC]
    RewriteCond "%{THE_REQUEST}" "!^GET.*fichier1\.php"      [NC]
    RewriteCond "%{THE_REQUEST}" "!^GET.*fichier2\.php"      [NC]
    RewriteCond "%{THE_REQUEST}" "!^GET.*/d/*"                 [NC]             // pour éviter le bouclage
    RewriteCond "%{THE_REQUEST}" "!^GET.*/css/*"              [NC]             // sans ça, il n\'y avait plus aucune mise en page
    RewriteCond "%{THE_REQUEST}" "!^GET.*/captcha/*"        [NC]             // sans ça, le captcha ne s\'affichait plus.
     
    RewriteRule "^(.+)" "/d/$1" [R=301,L,NE]
    Avec ce code, ça fonctionne. Index, fichier1 et fichier2 ne sont pas réécrits, et n'importe quel autre l'est. La mise en page fonctionne.
    Par contre, gros soucis, si les redirections marchent le site ne marche plus.
    Les erreurs et réussites qui sont passées en GET dans l'URL (par exemple https://monsite.fr/index?echec=404) sont comme perdues en route. Pourtant, comme je dis que s'il y a index dans THE_REQUEST, on ne doit pas réécrire, pourquoi les données sont-elles perdues ?

    Surtout que plus haut dans mon .htaccess, j'avais de longue date inscrit une autre réécriture, pour enlever le index.php et ne garder que les messages d'erreur visibles (oui, une pure question esthétique... ^^) Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	## enlever le index.php
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
    Lui a toujours marché : index.php n'était plus visible, mais les messages d'erreurs si, et donc le site fonctionnait.
    j'ai essayé de le désactiver pour voir si il interferait avec le nouveau code, mais ça ne change rien.

    Et de manière plus générale, les données envoyées en POST par un formulaire ne semblent plus être envoyées (le captcha faut était censé renvoyer une erreur, je n'en ai plus, et même quand tout est juste, et donc que je devrais ne pas avoir d'erreur mais un message positif, il ne se passe rien). La page est juste rechargée vierge.

    Comment puis-je garder/récupérer mes erreurs et mes infos ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    J'ai fait quelques tests supplémentaires, et je me suis rendu compte que les erreurs étaient bien passées, pas de problème pour ce qu'il y a en GET.

    Par contre, le questionnaire ne renvoie rien en POST. Pour le coup, mon code ne reçoit aucune info...
    Pourquoi et comment le htaccess barre-t-il l'accès à l'envoi POST ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    J'ai pris le temps de faire un certain nombre de tests, mais décidément, je n'y arrive pas.

    Voici mon htaccess au complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    RewriteEngine on
        ## www -> no www
    RewriteCond %{HTTP_HOST} ^www\.(.+)$
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE,QSA]
     
        ## http -> https
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE,QSA]
     
        ## enlever le index.php
    RewriteRule ^(.*?)index\.php/*(.*) /$1$2 [R=301,L,NE,QSA]
     
        ## enlever l'accès à cron.php
    RewriteRule ^(.*?)cron\.php/*(.*) /$1$2 [R=301,L,NE,QSA]
     
        ## Interdire l'accès à fichier.csv
    RewriteRule ^(.*?)fichier\.csv/*(.*) /$1$2 [R=301,L,NE,QSA]
     
            ## Personnaliser les pages d'erreur
    ErrorDocument 400 /index.php?echec=404
    ErrorDocument 404 /index.php?echec=404
     
            ## Rediriger les liens vers le dossier si ce n'est aucun des fichier suivant.
    RewriteRule ^(?:|truc|bidule|machin|chose)\.php$ - [L]
    RewriteRule ^(?:d|css|captcha|api)/$ - [L]
    RewriteRule ^ /d%{REQUEST_URI}  [R=301,L,NE,QSA]
    Mes erreurs :

    • quand je tape juste monsite.fr ou monsite.fr/index.php dans la barre de recherche, ça me renvoie direct sur le dossier /d/ (monsite.fr/d/) alors que l'index est dans la racine du fichier et qu'il y a une règle qui est censée s'en occuper à part.
    • Dans le dossier /d/, j'avais mis un fichier index.php qui renvoyait sur l'index à la racine, pour que les utilisateurs ne puissent pas voir le contenu du dossier. Actuellement, pour éviter le bouclage, j'ai dû l'enlever, sinon je tombe sur une erreur de page mal redirigée. J'ai donc soit une erreur, soit l'indexation de tous les fichiers du dossier qui s'affichent... Ce qui ne me va pas dans les deux cas.
    • Si je tape une adresse du genre monsite/lienarediriger, je n'obtiens pas monsite.fr/d/lienarediriger.php, mais monsite.fr/d/d/d/d/d/d/d/d/d/d/d/d/d/d/d/d/d/d/d/d/lienarediriger.php. Donc malgré le [L] à la fin des rewriteRule sur toutes les lignes, le htaccess redirige des liens qu'il ne devrait pas...
    • Bizarrement, si je tape monsite.fr/truc ou monsite.fr/bidule, je vais bien sur ces pages (mais uniquement ces deux pages !!), par contre, je n'ai plus de mise en page css. J'ai un affichage basique html.



    Si je désactive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ## enlever le index.php
    RewriteRule ^(.*?)index\.php/*(.*) /$1$2 [R=301,L,NE,QSA]
    et que je rajoute index dans la ligne suivante RewriteRule ^(?:|index|truc|bidule|machin|chose)\.php$ - [L]J'arrive à garder la page index sans une redirection vers /d/, mais sans css non plus. Et l'adresse monsite.fr emmène toujours vers monsite.fr/d/, donc ça ne résout pas mon problème.

    Il faudrait une règle du genre RewritrRule ^%{REQUEST_URI} == null - [L], mais je n'arrive pas à trouver la syntaxe adéquate.

    Aurais-tu des pistes pour m'aider à résoudre ces erreurs ?

    Merci en tout cas !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 26
    Points : 12
    Points
    12
    Par défaut
    Au final, j'ai laissé tomber l'idée d'une redirection par htaccess : Trop compliqué, et donc trop fragile. Le moindre truc qui n'est pas prévu casse tout. Et puis tu as raison, rediriger quasiment toutes les adresses, c'est lourd.
    Pour arriver à mes fins, j'ai fait un fichier "traitement.php", et mon ErrorDocument 404 renvoie dessus.

    dans ce document, j'ai mis ce code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    $filetest = __DIR__ . "/d".$_SERVER['REQUEST_URI'].".php";
     
    if (file_exists($filetest)) {
        $file = "/d".$uri.".php";
        header("location: ".$file);
        exit();
    }else{
        header("location: index.php?echec=404");
        exit();
    }
     
    ?>

    Ainsi, toute adresse url contenant une URI qui n'est pas dans le dossier racine est testée dans le dossier /d/, et si aucun fichier n'existe là-bas non plus avec ce nom, alors retour à erreur 404.

    C'est tellement simple... Mais bon, me prendre la tête avec le htaccess m'a appris plein de choses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2014, 20h55
  2. Redirection d'une url:8080 vers une autre url2:8081
    Par cedric00 dans le forum Apache
    Réponses: 13
    Dernier message: 12/08/2010, 22h48
  3. Réponses: 0
    Dernier message: 09/08/2010, 14h19
  4. URL vers dossier protégé par .htaccess ?
    Par loopback dans le forum Apache
    Réponses: 3
    Dernier message: 18/05/2008, 23h06
  5. [C#] Redirection d'une frame vers une page simple
    Par st0j dans le forum ASP.NET
    Réponses: 6
    Dernier message: 17/06/2005, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo