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 :

Accès par une certaine url uniquement


Sujet :

Apache

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 83
    Points : 65
    Points
    65
    Par défaut Accès par une certaine url uniquement
    Bonjour,

    J'ai un site par lequel je souhaiterais acceder uniquement si l'utilisateur tape un certain format d'adresse du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monsite.com/dossier/toto.titi
    Pour ce faire j'ai créé la condition suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond     %{REQUEST_URI} ^/dossier/(.*)\.(.*)$
    RewriteRule     (?i)^/dossier/(.*)$ /monfichier.php?var=$1&%{QUERY_STRING} [L]
     
    # Si on arrive avec une mauvaise adresse on redirige totalement
    RewriteRule   (.*) http://monsite.com
    La condition fonctionne bien par contre comme j'ai des images et des styles au format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monsite.com/images/...
    monsite.com/styles/....
    Les styles et les images ne s'affichent pas.

    Auriez-vous une solution à me proposer?

    Merci d'avance!

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Il faut ajouter des conditions pour ne pas interdire les URL qui finissent en .js, .ccs, etc. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{REQUEST_URI} !\.js$
    RewriteCond %{REQUEST_URI} !\.css$
    RewriteCond %{REQUEST_URI} !\.jpg$
    ...
    RewriteRule   (.*) http://monsite.com
    Pour info, le RewriteCond sur ta première règle (pour le /dossiers/...) ne sert strictement à rien car le masque du RewriteRule permet également de vérifier cette condition.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 83
    Points : 65
    Points
    65
    Par défaut
    Oui en effet merci pour la remarque -..-

    Tout fonctionne bien maintenant merci!

    Par contre j'ai une petite question: pourquoi je suis obligé de mettre les différentes conditions pour ne pas interdire ce que j'ai besoin sous la rewriterule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule     (?i)^/dossier/(.*)$ /monfichier.php?var=$1&%{QUERY_STRING} [L]
    En le faisant avant cette condition, pas d'accès aux fichiers js,...

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Désolé, je n'ai pas compris la question. La règle qui bloque les CSS, etc. ce n'est pas la première règle sur /dossiers mais la seconde. D'où le fait que j'ai mis des conditions sur cette seconde règle. Après, on peut peut-être factoriser les conditions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_URI} !\.(js|css|jpg|...)$
    plutôt que de mettre une RewriteCond par extension.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 83
    Points : 65
    Points
    65
    Par défaut
    Pour ce qui est de la factorisation c'est ce que j'ai fait merci.

    Pour mon autre question je pensait que le flag [L] à la fin de la rewriterule sur /dossier signifiait que si la règle était atteinte on ne continuait pas plus loin. Mais apparemment j'ai du louper quelque chose.

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    La réécriture d'URL est un processus itératif qui ne s'arrête que si Apache aboutit à une URL qui n'est plus modifiée par les règles. Apache va donc jouer plusieurs fois les règles. Le [L] permet juste d'arrêter là le cycle en cours mais Apache reprend aussitôt les règles pour les réappliquer et voir si on aboutit à une URL qui n'est plus modifiée.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/02/2015, 20h16
  2. Réponses: 6
    Dernier message: 12/12/2013, 08h08
  3. Réponses: 9
    Dernier message: 21/07/2009, 17h45
  4. Récuperer div dont l'id se termine par une certaine chaine
    Par Kimado dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/04/2008, 16h20
  5. [EJB] Accès par une application standalone type batch ?
    Par Ibenfath dans le forum Java EE
    Réponses: 3
    Dernier message: 20/11/2006, 18h47

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