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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    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 ?
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  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
    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 chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    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.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  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
    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 chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    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.
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Pas d'amélioration, hélas…
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

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, 18h22
  2. Fonction qui ne fonctionne pas sans alert()
    Par alaninho dans le forum jQuery
    Réponses: 6
    Dernier message: 09/07/2014, 16h02
  3. RewriteRule qui ne fonctionne pas
    Par Invité dans le forum Apache
    Réponses: 2
    Dernier message: 21/11/2009, 13h15
  4. RewriteRule qui ne fonctionne pas
    Par jetrokz dans le forum Apache
    Réponses: 3
    Dernier message: 04/11/2009, 12h56
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

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