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 qui ne fonctionne pas sans le flag R


Sujet :

Apache

  1. #1
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut RewriteRule qui ne fonctionne pas sans le flag R
    Bonjour à tous,

    Désolé, encore un problème de rewriting. J'ai cru voir que ça pullulait, rien que dans la première page…

    Voici mon .htaccess :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #
    # General options
    #
    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /
     
     
    #
    # Redirect www.42ndart.com, 42ndart.com and www.42ndart.org to 42ndart.org
    #
    RewriteCond %{HTTP_HOST} ^www\.42ndart\.org$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^www\.42ndart\.com$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^42ndart\.com$ [NC]
    RewriteRule ^(.*)$ http://42ndart.org/$1 [R=301,QSA]
     
     
    #
    # Don't go further if the requested file exists
    #
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule . - [L]
     
     
    #
    # Redirect 42ndart.org to 42ndart.org/scalpel/
    #
    RewriteRule ^$ scalpel/$1 [R=301,L]
     
     
    #
    # Rewrite to the cms root folder
    #
    # Rewrite empty requests to the cms root folder
    RewriteRule ^scalpel$ joomla/ [L]
     
    # Replace scalpel by joomla
    RewriteRule ^scalpel/(.*)$ joomla/$1
     
    # Rewrite /joomla/xxx.html to /joomla/index.php/xxx.html
    RewriteCond %{REQUEST_URI} ^/joomla/
    RewriteCond %{REQUEST_URI} !^/joomla/index.php
    RewriteRule ^joomla/(.+).html$ joomla/index.php/$1.html
     
    # Rewrite /joomla/index.php/xxx_y.html to /joomla/index.php/xxx.html?page=y (where y is an integer)
    RewriteCond %{REQUEST_URI} ^/joomla/index.php
    RewriteCond %{REQUEST_URI} _[0-9]+.html$
    RewriteRule ^joomla/index.php/(.+)_([0-9]+).html$ joomla/index.php/$1.html?page=$2
    Tout roule, excepté le dernier bloc de rewrite, qui provoque une erreur 404.
    Comme d'habitude lorsque je suis face à ce problème, j'ajoute un [R=301] pour voir la tête de l'adresse réelle. Et là, surprise, plus d'erreur.

    J'ai trifouillé pendant des heures, je ne parviens pas à expliquer ça.

    Qu'est-ce que cela peut bien vouloir dire ?

  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
    Tu testes avec quelle URL ?

    Tu as accès aux logs d'erreurs d'Apache ? Si oui, regarde dedans quelle URL calculée par mod_rewrite provoque cette erreur 404.

    Ce qu'il doit se passer c'est que le R provoque l'arrêt instantané de la réécriture, alors que quand il n'y est pas, Apache va rejouer toutes les règles avec la nouvelle URL obtenue, et là il se peut qu'il y ait une autre réécriture qui se fasse et aboutisse à une URL qui ne correspond à rien, d'où l'erreur 404. C'est une erreur de croire qu'Apache lit une seule fois les règles et s'arrête à la fin du fichier : Apache va rejouer les règles jusqu'à converger vers une URL stable qui ne peut plus être réécrite.

  3. #3
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Bonsoir Mac,

    Avec celle-ci : http://42ndart.org/scalpel/demonstration_1.html qui est actuellement redirigée vers (je retire un h du http pour que Google n'indexe pas cette adresse) ttp://42ndart.org/joomla/index.php/demonstration.html?page=1 (avec le flag R).

    J'ai accès à access.log, qui me donne ce style d'infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xx.xx.xx.xx - - [24/Nov/2009:05:49:30 +0100] "GET /scalpel/demonstration_1.html HTTP/1.1" 404 1417 42ndart.org "http://42ndart.org/joomla/index.php/index.php/demonstration.html?page=2" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091106 Firefox/3.5.5" "-"
    xx.xx.xx.xx - - [24/Nov/2009:05:49:32 +0100] "GET /joomla/index.php/index.php/demonstration.html?page=2 HTTP/1.1" 200 12215 42ndart.org "http://42ndart.org/joomla/index.php/index.php/demonstration.html?page=1" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091106 Firefox/3.5.5" "-"
    Sauf erreur de ma part, il me semble que ça ne m'aide pas beaucoup…

    Ce qu'il doit se passer c'est que le R provoque l'arrêt instantané de la réécriture
    J'ai essayé avec le flag L et ça ne change rien.

  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
    Citation Envoyé par Florian Goo Voir le message
    Sauf erreur de ma part, il me semble que ça ne m'aide pas beaucoup…
    C'est pour ça que je parlais du logs d'erreurs (error_log), pas des logs d'accès

    Pour le flag L, c'est normal : le flag arrête la boucle de réécriture en cours, pas le cycle complet.

    EDIT : j'ai un gros problème : tes règles fonctionnent très bien chez moi donc pas moyen de déboguer. A tout hasard, essaie d'ajouter -MultiViews à Options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Options +FollowSymlinks -MultiViews

  5. #5
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    C'est pour ça que je parlais du logs d'erreurs (error_log), pas des logs d'accès
    Oui bien sûr . Malheureusement je n'ai accès qu'à ça via mon FTP. Je vais voir si je peux avoir autre chose depuis l'espace client de mon hébergeur.

    Pour le flag L, c'est normal : le flag arrête la boucle de réécriture en cours, pas le cycle complet.
    Les tutos que j'ai lus étaient justement flous sur ce point. Merci pour cette précision.
    EDIT : Du coup cette règle est inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #
    # Don't go further if the requested file exists
    #
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule . - [L]
    ?

    EDIT : j'ai un gros problème : tes règles fonctionnent très bien chez moi donc pas moyen de déboguer. A tout hasard, essaie d'ajouter -MultiViews à Options :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Options +FollowSymlinks -MultiViews
    Au moins ça me rassure sur le fait que mes règles soient correctes, avec le temps que j'ai passé dessus à vérifier !
    Je vais tester l'option de suite.

  6. #6
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Pas d'amélioration, hélas…

  7. #7
    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
    Comme je disais, je n'ai pas ce comportement sur mon Apache, donc dur de comprendre. Tu as regardé dans les logs d'erreur error_log ? Tu peux aussi activer les traces debug de mod_rewrite pour comprendre ce qu'il fait.

  8. #8
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Je me suis renseigné et c'est officiel, mon hébergeur ne me donne pas accès au fichier error_log (pour une raison qui m'échappe).

    Concernant le trace debug, comment dois-je procéder ?
    J'ai cherché ces termes sur google, qui me renvoie sur… cette page .

  9. #9
    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 Florian Goo Voir le message
    Concernant le trace debug, comment dois-je procéder ?
    Je ne sais pas, sûrement dans la doc Apache...

  10. #10
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    RTFM
    Merci, je vais tester ça .

  11. #11
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Décidément je ne suis pas aidé…
    Si j'ajoute cette ligne au .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteLog "rewrite.log"
    j'ai le droit à une erreur 500. Avec ou sans leading /.

    C'est pourtant bien la bonne syntaxe ?
    Il faut savoir que j'ai un hébergement mutualisé.

  12. #12
    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
    Je n'avais pas compris que c'était un hébergement mutualisé. C'est fort possible que tu ne puisses pas utiliser les logs de mod_rewrite dans un tel contexte. Essaie de mettre un chemin absolu : utilise un script phpinfo ou équivalent pour retrouver le chemin complet vers ton document root et ajoute ce chemin devant le nom du fichier. D'après la doc (toujours...), si tu ne mets pas de / devant le nom du fichier, le chemin est relatif au server root (différent du document root), un répertoire auquel de toute façon tu n'as pas accès.

  13. #13
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Oui j'ai bien lu ça, mais j'ai supposé que j'étais chrooté alors j'ai pensé que le server root = la racine de mon espace.
    Bonne idée la tentative de récupérer le chemin absolu, je vais voir ça .

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    L'erreur 500 est normale puisque les directives RewriteLog et RewriteLogLevel ne sont pas utilisables depuis un fichier .htaccess.

    Pour réellement déboguer les règles, il faudrait donc reproduire l'environnement sur un où on a la main (en local par exemple).

  15. #15
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Bon, c'était bien vu, mais même punition, erreur 500.
    J'ai tenté avec et sans slash, et même en créant le fichier et en donnant les droits d'écriture à tout le monde…

  16. #16
    Membre éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par julp Voir le message
    L'erreur 500 est normale puisque les directives RewriteLog et RewriteLogLevel ne sont pas utilisables depuis un fichier .htaccess.

    Pour réellement déboguer les règles, il faudrait donc reproduire l'environnement sur un où on a la main (en local par exemple).
    Mac l'a fait pour moi mais je vais tester chez moi, oui…

    Edit : Pourtant la doc dit
    This module operates on the full URLs (including the path-info part) both in per-server context (httpd.conf) and per-directory context (.htaccess)

  17. #17
    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
    Ta citation parle du module mod_rewrite de manière générale (les RewriteRule et RewriteCond notamment), pas des directives de log qui ne peuvent effectivement pas être utilisées dans un .htaccess.

Discussions similaires

  1. [MySQL] requete qui ne fonctionne pas,sans message d'erreur
    Par choupinou22 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 30/06/2015, 19h22
  2. Fonction qui ne fonctionne pas sans alert()
    Par alaninho dans le forum jQuery
    Réponses: 6
    Dernier message: 09/07/2014, 17h02
  3. RewriteRule qui ne fonctionne pas
    Par Invité dans le forum Apache
    Réponses: 2
    Dernier message: 21/11/2009, 14h15
  4. RewriteRule qui ne fonctionne pas
    Par jetrokz dans le forum Apache
    Réponses: 3
    Dernier message: 04/11/2009, 13h56
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 11h04

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