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 :

RewriteRule avec (.*) = erreur 500


Sujet :

Apache

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut RewriteRule avec (.*) = erreur 500
    Bonjour à toutes et à tous,

    Tout nouveau sur ce forum, je me tourne vers vous car j'ai grand besoin d'aide (avant de finir chauve à force de m'arracher les cheveux qu'il me reste encore).
    Notez avant tout que je suis un gros débutant en matière de réécriture d'url et d'expressions régulières. Je les utilise d'un autre côté depuis plusieurs années, mais on m'avait mâché le travail (mal je pense cela dit) et je n'avais jamais pris la peine ni le temps de comprendre. Aujourd'hui c'est différent, j'ai certes personne pour me mâcher le boulot, mais j'ai aussi une grande envie de comprendre, d'autant que ça a l'air quand même 'achement puissant comme truc. Ceci dit, ayez pitié, j'ai déjà ingurgité moult lectures sur le sujet

    Entrons donc dans le vif du sujet si vous le voulez bien.
    Imaginons que j'ai un site web qui présente les boutiques des commerçants de mon village. Pour simplifier, on va prendre des boutiques que tout le monde connaît.

    - Ce que je veux obtenir, c'est des URL de la forme : /boutiques/decathlon.php
    - Ce que j'ai, c'est une page "page-boutiques.php" dans mon répertoire /boutiques/ , qui prend le nom de la boutique en paramètre (b, c'est le paramètre).

    En résumé si on tape /boutiques/page-boutiques.php?b=decathlon. Pas de souci, ça marche. Mais c'est pas beau évidemment.
    Je cherche donc à réécrire l'url en question.
    Alors comme je disais, je me suis documenté, j'ai fait pas mal d'essais, j'ai essayé de comprendre... mais j'arrive à rien (sinon je serais pas là ^^).

    Actuellement je suis là dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-zA-Z0-9]+)\.php$ /boutiques/page-boutiques.php?b=$1 [L]
    Règle qui fonctionne très bien avec decathlon. Là où ça se complique, c'est si on prend La Redoute par exemple.
    La page désirée est : /boutiques/la-redoute.php
    Sauf que le tiret me pose quelques soucis... Alors j'ai essayé d'ajouter ce fameux tiret à ma règle, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-zA-Z0-9-]+)\.php$ /boutiques/page-boutiques.php?b=$1 [L]
    Et ça marche pas figurez-vous. Erreur 500 sur le site.
    Et là où le bât blesse, c'est que quand je teste cette expression sur des sites dédiés (regex101.com par exemple), bah il me dit que c'est tout bon.

    Notez aussi en passant, mais ça, ce sera le problème suivant, que du coup, l'accès à la page index.php du répertoire /boutiques/ n'est plus possible avec cette règle.
    Et là je sèche aussi.

    Je précise que mon fichier .htaccess est à la racine du dossier /boutiques/

    Voilà, j'espère que vous pourrez m'aider avant que je n'ai besoin d'implants capillaires ^ ^

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut echapper ton tiret :

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide sabotage, malheureusement, ça me provoque une erreur 500 (j'avais déjà essayé en fait).

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par sabotage
    Il faut echapper ton tiret
    Non, ce n'est pas nécessaire puisque le tiret est en fin d'énumération de la classe, il perd donc son sens de plage de caractères et retrouve de facto son sens littéral (idem s'il est au début).

    Drakarys, tu as essayé en mettant le slash initial ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/([a-zA-Z0-9-]+)\.php$ /boutiques/page-boutiques.php?b=$1 [L]

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci à toi aussi pour ton aide Bovino. Malheureusement là encore, ça ne daigne pas fonctionner.
    J'ai accès à ma page /boutiques/ en faisant comme tu as dit, mais pas aux pages du type /boutique/nom.php

    J'ai aussi essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/boutiques/([a-zA-Z0-9-]+)\.php$ /boutiques/page-boutiques.php?b=$1 [L]
    Mais ça donne le même résultat.

    A toutes fins utiles, je vous mets le contenu principal de mon .htaccess situé lui à la racine du site (un niveau au-dessus donc), des fois que vous y voyiez quelque chose qui puisse clocher avec ce qu'on essaie de faire là :
    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
    #Pour activer PHP version 5 chez OVH
    SetEnv PHP_VER 5
     
    # deny most common except .php
    <FilesMatch "\.(inc|tpl|h|ihtml|sql|ini|conf|class|bin|spd|theme|module)$">
    deny from all
    </FilesMatch>
     
    <Limit GET PUT POST>
    Order Allow,Deny
    Allow from all
    </Limit>
     
    ErrorDocument 404 http://www.monsite.fr/
     
    RewriteEngine on
    Options -Indexes
    Options +FollowSymlinks
     
    RewriteCond %{HTTP_HOST} ^monsite.fr$
    RewriteRule ^(.*) http://www.monsite.fr/$1 [QSA,L,R=301]
    Après ça, j'ai différentes règles de réécriture, mais à priori rien qui pose problème. Enfin je suis pas sûr de moi à 100% non plus.
    J'ai peut-être ça qui peut poser souci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^boutique-uneboutique.php$ /nouvelle-url-boutique.php [QSA,L,R=301]
    RewriteRule ^boutique-(.*)\.php$ /promos-$1.php [QSA,L,R=301]
    Voilà pour l'instant. Je continue de faire des tentatives de mon côté bien entendu.
    Encore merci pour vos tentatives


    ### Edition - 15h00
    Je crois que ça se complique, ça en devient même paranormal.
    J'arrive à quelque chose de plus intéressant en écrivant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([-abcdefghijklmnopqrstvwxyz0123456789]+)\.php$ /boutiques/page-boutiques.php?b=$1 [L]
    Ce qui fonctionne parfaitement pour /boutiques/decathlon.php ou encore /boutiques/le-marchand.php
    Mais si vous avez l'oeil, vous constaterez qu'il manque une lettre : le u !
    Dès que j'ajoute ce satané "u", j'ai une erreur 500.
    Alors là je nage...

    ### Edition : 15h40
    De pire en pire...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteRule ^([-uabcdefghijklmnopqrsvwxyz0123456789]+)\.php$ /boutiques/page-boutiques.php?b=$1 [L]
    RewriteRule ^([-abcdefghijklmnopqrstvwxyz0123456789]+)\.php$ /boutiques/page-boutiques.php?b=$1 [L]
    Ces deux règles fonctionnent bien SAUF que :
    - Dans première, je peux pas mettre la lettre "t" sans avoir une erreur 500
    - Dans la seconde, je peux pas mettre la lettre "u" sans avoir une erreur 500
    >> Le point commun entre les deux règles ? La position dans chaque ligne, du caractère qui va me provoquer l'erreur 500.

    Please help

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tout le monde,
    Je poste un nouveau message sans éditer le précédent parce que ce que je vais dire est peut-être important et plus clair.

    Avec une règle écrite de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)\.php$ /dossier/source.php?c=$1 [L]
    J'obtiens une erreur 500 pour tout le répertoire "/dossier/".
    (Alors que je souhaiterais accéder à /dossier/cequejeveux.php ou encore à /dossier/ )

    Par contre, si je m'amuse à faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^salut-coucou-(.*)\.php$ /dossier/source.php?c=$1 [L]
    Et que je tente d'accéder à /dossier/salut-coucou-toutcequejeveux.php
    Là, aucun problème, ça marche parfaitement.

    Alors je me dis que ça peut être :
    - ce qu'on appelle "une erreur de syntaxe à la con",
    - un conflit avec d'autres règles (mais cette nuit j'ai essayé avec un fichier .htaccess refait à neuf, et sauf erreur de ma part, même résultat).
    - Un souci chez l'hébergeur ? (OVH - mutualisé).

    Notez que le testeur de .htaccess disponible ici me dit que ma première règle est tout à fait valide.

    Avec ces précisions, est-ce que l'un(e) de vous aurait une petite idée de ce qui cloche là dedans ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pour info, ovh met a disposition les error logs du serveur apache. Cela devrait t'indiquer la cause de tes http 500

    https://logs.ovh.net/<ton_nom_de_domaine>/osl/error

    Autre question: As-tu également activé le pare-feu applicatif pour ton nom de domaine (à vérifier dans le manager d'ovh)? le serveur web répond également par une http 500 lorsque le pare-feu bloque une certaine url.
    Dernière modification par Invité ; 15/04/2014 à 11h27.

  8. #8
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Points : 135
    Points
    135
    Par défaut
    Salut,

    je ne suis pas sur du tout mais, ne s'agirait-il pas du même problème que le post post un peu au dessu:
    http://www.developpez.net/forums/d14...iting-slug-id/

    Essaye avec le flag [END] plutot que [L]

    j'ai l'impression que je problème est que "/boutiques/page-boutiques.php?b=$1" est de nouveau matché par sa propre règle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^([a-zA-Z0-9]+)\.php$  [L]
    Et donc il doit y avoir un problème de réécriture infinie ou quelque chose dans le même genre ^^

    autre solution:
    Si tu change la règle pour supprimer le ".php" de tes url, ça devrait également mieux fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-zA-Z0-9-]+)$ /boutiques/page-boutiques.php?b=$1 [L]
    par exemple,
    par contre tes url devront avoir cette forme:
    site.com/boutiques/la-redoute
    et non pas:
    site.com/boutiques/la-redoute.php

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/02/2010, 11h15
  2. Erreurs 500 avec apache2/php5
    Par jforks dans le forum Apache
    Réponses: 3
    Dernier message: 07/04/2008, 13h04
  3. [GD] Erreur 500 avec script d'une ligne
    Par keul dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 24/09/2007, 11h50
  4. [SQL-Server] Erreur 500 lors d'un script php avec sql
    Par DeusDavid dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/12/2006, 19h47

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