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 :

RegEx .htaccess pour répertoires années


Sujet :

Apache

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut RegEx .htaccess pour répertoires années
    Bonjour à vous,
    sur l'un de mes sites, je classe différentes versions du site dans des dossier correspondant aux années de développement.

    Voici un exemple de structure de la base du site*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    2015/
    2017/
    2019/
    .htaccess
    En accédant à la racine du site (par exemple https://mon-site.fr), je souhaite automatiquement afficher le contenu d'un répertoire (en l'occurrence, on va dire le répertoire 2017), mais également accéder, si nécessaire, aux autres répertoires (par exemple https://mon-site.fr/2019 qui est en développement).

    Jusqu'à maintenant, j'utilisais ce code au sein du fichier .htaccess de la base du site :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !/\d{4}/
    RewriteRule (.*) 2017/$1 [L]
    Cela fonctionne bien mis à part dans le cas ou j'aurai un autre dossier composé de 4 numéros dans mon lien (par exemple https://mon-site.fr/publications/2016/mon_article.pdf).

    J'ai alors tenté de créer une regex ne cherchant la suite de 4 chiffres qu'en début de chaîne, mais cela ne fonctionne dans aucun des deux cas suivants (je remplace simplement la 2ème ligne du code précédent par celle-ci) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !^/\d{4}/
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !^\d{4}/
    Auriez-vous une idée de la bonne regex à utiliser ?


    Merci !

  2. #2
    Membre habitué Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 117
    Points : 187
    Points
    187
    Par défaut
    Bonjour Pascal,

    Après quelques tests, la bonne règle Rewrite est cell-çi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_URI} !^/\d{4}/
    RewriteRule (.*) 2018/$1 [R=301,L]
    Tests curl
    Test 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -k https://www.monsite.net/2018/pubs/1117/index.php
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <html>
    <head>
    <meta name="robots" content="noindex">
    </head>
    <body>
    ma page
    ...
    Test 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -k https://www.monsite.net/pubs/1117/index.ph
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html><head>
    <title>301 Moved Permanently</title>
    </head><body>
    <h1>Moved Permanently</h1>
    <p>The document has moved <a href="https://www.monsite.net/2018//pubs/1117/index.php">here</a>.</p>
    </body></html>
    Test 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -k https://www.monsite.net/pubs/index.php
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>301 Moved Permanently</title>
    </head><body>
    <h1>Moved Permanently</h1>
    <p>The document has moved <a href="https://www.monsite.net/2018//pubs/index.php">here</a>.</p>
    </body></html>

    ####

    L'autre règle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_URI} !^\d{4}/
    RewriteRule (.*) 2018/$1 [R=301,L]
    Génère un ajout qui fait doublon : donc pas bon pour tes affaires.
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -k https://www.monsite.net/2018/pubs/1117/index.php
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>301 Moved Permanently</title>
    </head><body>
    <h1>Moved Permanently</h1>
    <p>The document has moved <a href="https://www.monsite.net/2018//2018/pubs/1117/index.php">here</a>.</p>


    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
    - Ne vous privez pas pour voter pour ma réponse si elle vous plaît bien
    - Ne pas hésiter à cliquer sur "Résolu" quand votre problème posé a trouvé une solution. Et un petit merci fait toujours plaisir

  3. #3
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 757
    Points : 2 992
    Points
    2 992
    Par défaut
    Bonjour

    Désolé je ne vais pas répondre à ta question mais ... tu laisses en ligne des vieilles copies de ton site ?

    Si ton site est développé dans un langage dynamique comme PHP, cela veut donc dire que, peut-être, tu aurais des failles sur un vieux site parce que tu aurais utilisé une librairie XYZ qui en 2016 contenait une faille béante. En 2018, tu n'utilises plus cette librairie ou du moins, une version à jour et patchée mais la faille est toujours là dans ton dossier /2016.

    Est-ce que ce que je raconte ici est applicable à ta situation ? Si oui, oups...

    (Sur le plan de la sécurité, on ne laisse jamais un vieux site sur son hébergement de production; on le télécharge sur sa machine et on l'archive).

    Bonne soirée.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour à vous et merci pour vos réponses.

    @silfun1, merci beaucoup pour votre réponse.
    En fin de compte, j'utilise le code suivant qui répond exactement à mes attentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/\d{4}/
    RewriteRule (.*) 2018/$1 [L]
    Pour information, je ne comprenais pas que l'adresse débutait par un "/" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Avant :	RewriteCond %{REQUEST_URI} !^\d{4}/
    Après :	RewriteCond %{REQUEST_URI} !^/\d{4}/
    Par ailleurs, merci pour l'information, j'ai découvert le tag [R] et [R=301] dont j'ignorai l’existence.


    @cavo789, merci également pour votre remarque tout à fait pertinente.
    En occurrence, je ne l'avais pas fait, néanmoins ces sites restaient relativement simples et n'utilisaient pas de bibliothèque.
    Quoi qu'il en soit, ces répertoires peuvent être protégés par mot de passe (via un fichier htaccess et htpasswd).


    Merci encore et bonne continuation*!

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

Discussions similaires

  1. htaccess pour supprimer un répertoire de l'url
    Par kaking dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2017, 10h19
  2. Réponses: 12
    Dernier message: 04/09/2006, 17h59
  3. .htaccess pour gérer l'erreur 404 : plantage du site
    Par Thomus38 dans le forum Apache
    Réponses: 8
    Dernier message: 19/07/2006, 12h29
  4. Probleme avec DateDiff pour les années....
    Par angelevil dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 27/03/2006, 09h19
  5. Moyenne 5 dernières année pour chaque année?
    Par kissmytoe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/02/2006, 19h28

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