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 :

Redirection pour répertoires qui n'existent pas ou erreur 404


Sujet :

Apache

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Points : 59
    Points
    59
    Par défaut Redirection pour répertoires qui n'existent pas ou erreur 404
    Bonjour à tous,

    Je rencontre une difficulté avec l'utilisation d'un fichier .htaccess.
    Voici tout d'abord un petite mise en situation sur le fonctionnement du site.
    Il s'agit d'un site qui répertorie des agences et qui permet à chacune d'elle de disposer de son propre micro site Internet.

    J'ai donc deux agences, par exemple :
    Agence 1
    Agence 2

    Chaque agence a son propre site à l'adresse suivante (et je dois conserver ce format d'URL) :
    http://www.domaine.com/agences-1/
    http://www.domaine.com/agences-2/

    Et à l'adresse du domaine, sans répertoire derrière, il y a le site principal

    Mon système de réécriture d'URL est le suivant, mais je voudrais que tous les répertoires qui n'existent pas réellement sur le serveur et tous ceux qui ne sont pas des agences affichent une page d'erreur 404 personnalisée.

    J'ai un répertoire admin avec une règle adaptée, mais si on tape par exemple
    http://www.domaine.com/rep/ on arrive sur un page du site principale (qui ne devrait pas être visible) avec une mise en page incorrecte.

    J'espère que je suis assez clair ?
    Tout ce qui se trouve dans le fichier suivant fonctionne, sauf que je n'arrive pas à créer la règle que je viens de décrire. Si vous avez des idées, je suis preneur. Merci d'avance !
    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
     
    RewriteEngine on
    Options +FollowSymLinks
    #En local et distant
    RewriteRule ^page-([0-9a-z\-]+)-([0-9]+)-([0-9]+)\.php$ index.php?page_id=$2&langue=$3 [L]
    RewriteRule ^([0-9a-z\-]+)/page-([0-9a-z\-]+)-([0-9]+)-([0-9]+)\.php$ index-agence.php?agce_nom=$1&page_id=$3&langue=$4 [L]
    RewriteRule ^([0-9a-z\-]+)\/?$ index-agence.php?agce_nom=$1 [L]
    #Liste des biens sélectionnés
    RewriteRule ^([0-9a-z\-]+)\/nos-biens-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.php$ nos-biens.php?agce_nom=$1&page_id=$2&page=$3&langue=$4&classement=$5 [L]
    RewriteRule ^([0-9a-z\-]+)\/our-properties-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.php$ nos-biens.php?agce_nom=$1&page_id=$2&page=$3&langue=$4&classement=$5 [L]
    RewriteRule ^([0-9a-z\-]+)\/vendus-par-nos-soins-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.php$ nos-biens.php?agce_nom=$1&page_id=$2&page=$3&langue=$4&classement=$5 [L]
    RewriteRule ^([0-9a-z\-]+)\/sold-by-us-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\.php$ nos-biens.php?agce_nom=$1&page_id=$2&page=$3&langue=$4&classement=$5 [L]
    #Fiche détaillée des annonces
    RewriteRule ^([0-9a-z\-]+)\/annonce-([0-9a-z\-]+)-([0-9]+)-([0-9]+)\.php$ annonce.php?agce_nom=$1&ance_id=$3&langue=$4 [L,QSA]
    #Permet l'accès à l'interface d'administration
    RewriteCond %{REQUEST_URI} !admin/index\.php(.*)$
    RewriteRule admin/index.php [L]

  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
    C'est à cause de la 3ème règle, à mon avis. Elle est censée servir à quoi ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    La 3ème règle permet d'afficher la page par défaut des sous-sites agences quand on saisit une adresse de type http://www.domaine.com/agence-1/ (sans préciser une page en particulier).

    Il est effectivement fort possible que ce soit cette règle qui soit à l'origine du problème que je rencontre, puisque quelque soit le répertoire que l'on saisit, la règle doit fonctionner, mais pour les agences qui n'existent pas, le code PHP ne trouve aucune correspondance dans la base de données... mais je ne sais pas comment contourner ça, à moins éventuellement de spécifier une règle pour chaque agence, mais c'est un peu galère puisque ça demande de modifier le fichier à chaque fois qu'on ajoute une agence...

  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
    Il suffit de vérifier, dans index-agence.php, que l'agence demandée existe et si elle n'existe pas, tu renvoies un code 404 avec le code HTML de ta page d'erreur ou bien tu rediriges explicitement (header("Location: ...")) le navigateur vers la page d'accueil du site ou une page d'erreur (mais dans ce dernier cas, le code d'erreur 404 n'est pas utiliser, ce que tu devrais faire).

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Effectivement, mais je me suis mal exprimé dans ma réponse. Je peux effectuer cette vérification et ajouter une page erreur 404 personnalisée, mais le problème, c'est que si j'enlève la 3ème règle, la page index-agence.php n'est jamais exécutée. Sans cette règle, une adresse de type http://www.domaine.com/agence-1/ génère une erreur 404.

  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
    Est-ce que j'ai dit à un moment donné qu'il fallait supprimer cette 3ème règle ? Je ne crois pas : j'ai juste dit qu'elle était en cause. Ce que je dis c'est d'ajouter un truc en plus dans tout ce qui existe déjà : garde ton .htaccess et vérifie que l'agence existe dans ton fichier PHP.

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Effectivement, tu n'as pas écrit qu'il fallait retirer cette règle, c'est une mauvaise interprétation de ma part.

    J'ai donc conservé l'existant et ajouté une vérification de l'existence des agences. Si une agence n'existe pas, je redirige vers ma page d'erreur personnalisée.

    Je te remercie pour l'analyse, puisque désormais ça fonctionne comme je le souhaite.

    J'ai intégrée cette ligne dans le fichier .htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument  404  http://www.domaine.com/erreur-404.php
    Ca fonctionne bien, chaque demande d'accès à une page page qui n'existe pas affiche cette page d'erreur personnalisée. Mais ce que je n'ai pas compris comment générer correctement un header 404 depuis la page index-agence.php.

    Dans le test d'existence de l'agence, j'ai ajouté ces lignes. Donc, soit l'agence existe et j'affiche le contenu, soit elle n'existe pas et j'utilise ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header("Status: 404 Not Found");
    header("HTTP/1.0 404 Not Found");
    //header("Location: erreur-404.php");
    Avec les 3 lignes actives, j'ai bien ma page d'erreur personnalisée qui s'affiche, mais si je laisse uniquement les deux premières, le navigateur affiche sa propre page d'erreur 404.

  8. #8
    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
    Citation Envoyé par Benzz Voir le message
    mais si je laisse uniquement les deux premières, le navigateur affiche sa propre page d'erreur 404.
    Eh oui, merci Internet Explorer !!! C'est pénible mais avec IE, pour les erreurs 404, si on veut qu'il affiche ce qu'il faut il faut faire une redirection et donc faire un header("Location: ...").

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Ok, merci de cette précision.
    Ceci dit, je n'utilise pas IE mais Firefox, donc je suppose qu'il s'agit de la même chose. Le problème est donc résolu. Merci de ton aide !

  10. #10
    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
    Surprenant. C'est peut-être une nouvelle fonctionnalité de FF mais peut-être aussi qu'aucun code HMTL n'est renvoyé avec l'erreur 404

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Quoi qu'il en soit, je ne m'attarderai pas plus sur le problème puisque le résultat que je voulais obtenir est là. On pourrait probablement faire plus propre en creusant un peu, mais le temps manque... merci encore et peut être à bientôt sur le forum

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2007, 16h05
  2. Réponses: 3
    Dernier message: 14/08/2006, 19h13
  3. [SQL Server 2005] Selection de ce qui n'existe pas
    Par transistor49 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/04/2006, 09h20
  4. Réponses: 8
    Dernier message: 26/01/2006, 14h47
  5. Select qui n'existe pas
    Par daijoubu dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/01/2006, 18h34

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