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 :

Utiliser un index.php unique avec des dossiers existants


Sujet :

Apache

  1. #1
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut Utiliser un index.php unique avec des dossiers existants
    Bonjour,
    Je veux rediriger toutes les pages non-existantes vers index.php à la racine du site. C'est simple, voilà mon .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php
    ErrorDocument 400 /index.php?er=400
    ErrorDocument 401 /index.php?er=401
    ErrorDocument 403 /index.php?er=403
    ErrorDocument 404 /index.php?er=404
    ErrorDocument 406 /index.php?er=406
    ErrorDocument 408 /index.php?er=408
    ErrorDocument 411 /index.php?er=411
    ErrorDocument 500 /index.php?er=500
    Cela redirige vers /index.php toute url dont le fichier n'est pas présent sur le serveur ainsi que les url www.site.com/rep/ si je n'ai pas de répertoire nommée "rep".

    Et c'est là que j'ai un problème : il se peut que le répertoire existe vraiment et à ce moment là Apache veut l'ouvrir et renvoi une erreur 403 Forbiden (accès au répertoire interdit).
    J'ai des fichiers et des sous-répertoires auxquels je peux accéder sans problème.
    Si je mets un index.html dedans il s'affiche évidemment sans problème mais ça ne redirige pas vers mon index principal à la racine comme je voudrais.

    Quelle est la meilleure solution dans ce cas (hormis changer les noms de mes répertoires, ce qui ne m'arrange pas pour des raisons de rétrocompatibilité et de référencement) ?
    Modifier mon htaccess à la racine (et comment), ajouter un htaccess dans ces répertoires problématique (et avec quel contenu), faire un bête include() dans un index.php dans ces répertoires problématiques... ?

    Tout gérer dans mon htaccess de la racine serait le plus pratique mais je ne sais pas comment.
    Merci d'avance !

  2. #2
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut
    J'ajoute que la redirection se fait bien vers index.php à la racine mais Apache considère qu'il y a une erreur 403 (ou 404 pour un fichier) et donc ne suis pas la règle de réécriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule . /index.php [L]
    mais celle d'en-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 403 /index.php?er=403
    Ce qui ne me va pas puisque le client (et les moteurs de recherche) va recevoir le code d'erreur alors que je crée moi-même la page selon les infos de l'URL et envoie une page valide.
    L'autre problème est qu'alors les variables d'environnement POST ou GET ne passent pas. Si je fais monsite.com/rep/?var=123 'var' ne suit pas.

  3. #3
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Points : 107
    Points
    107
    Par défaut
    J'ai trouvé ma réponse.

    Le problème est que lorsqu'on appelle www.site.com/rep/ apache cherche le fichier d'index de ce répertoire et ne le trouve pas, il veut donc afficher le contenu du dossier, ce qui génère une erreur 403 vu que j’interdis de lister le contenu des dossiers.
    Du coup j'ai bien une redirection vers l'index.php de la racine du site mais pas grâce à mod_rewrite mais via la ligne plus bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 403 /index.php?er=403
    et je perds en passant mes variables post et get.

    Il suffit donc de forcer le serveur à afficher l'index.php à la racine en déclarant dans le répertoire que l'index de celui-ci n'est autre que celui de la racine. Et c'est tout !
    Il faut créer un fichier site.com/rep/.htaccess contenant uniquement la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryIndex /index.php


    Il ne faut pas mettre de mod_rewrite dans ce htaccess sinon ça n'utilise plus le htaccess du niveau supérieur.
    Et le tour est joué !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/07/2011, 17h50
  2. Utiliser Maven 2.0.11 avec des projets existants
    Par Normina dans le forum Maven
    Réponses: 0
    Dernier message: 21/04/2011, 23h34
  3. [PHP-JS] arborescence des dossiers
    Par hacksi dans le forum Langage
    Réponses: 4
    Dernier message: 12/06/2008, 09h09
  4. Index unique pas unique avec des nulls ?
    Par marot_r dans le forum Modélisation
    Réponses: 6
    Dernier message: 17/03/2008, 19h53
  5. Réponses: 2
    Dernier message: 26/06/2007, 15h40

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