Forum Linux.général Apache, mod_rewrite et Directory

Posté par  .
Étiquettes :
0
4
juin
2012

Salut,

Je tente de ré-écrire toute URL ne désignant pas un fichier comme un argument au fichier index.phpet cela, sans utiliser de fichier.htaccess`.

Une requête vers http://www.example.com/test doit devenir http://www.example.com/index.php?q=/test.

J'utilise Debian Squeeze (6.0) et Apache 2.2.16. Voici mon fichier de configuration :

<VirtualHost *:80>
  DocumentRoot /var/www/example
  ServerName www.example.com
  ServerAlias example.com

  ErrorLog /var/log/apache2/error/example.log
  CustomLog /var/log/apache2/access/example.log combined

  <IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
    RewriteRule ^/(.*) http://www.example.com/$1 [L,R=301]
  </IfModule>

  <Directory "/var/www/example">
    AllowOverride None
    Options -Indexes +FollowSymLinks
    DirectoryIndex index.php

    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_URI} !=/favicon.ico
      RewriteRule ^/(.*)$ index.php?q=$1 [L,QSA]
    </IfModule>
  </Directory>
</VirtualHost>

si le premier appel à mod_rewrite dans VirtualHost change bien example.com en www.example.com, le second appel dans
Directory ne semble pas fonctionner et une requête vers http://www.example.com/test résulte en une erreur 404.

Voici ce que l'on peut voir dans les logs :

(2) init rewrite engine with requested uri /test
(3) applying pattern '^/(.*)' to uri '/test'
(4) RewriteCond: input='www.example.com' pattern='!^www\.example\.com $' [NC] => not-matched
(1) pass through /test
(3) [perdir /var/www/example/] strip per-dir prefix: /var/www/example/test -> test
(3) [perdir /var/www/example/] applying pattern '^/(.*)$' to uri 'test'
(1) [perdir /var/www/example/] pass through /var/www/test/test
File does not exist: /var/www/test/test

Qu'ai-je manqué ?

  • # 200 OK

    Posté par  . Évalué à 3.

    Bien j'ai trouvé la source de mon erreur. Il s'agit de l'expression régulière qui est incorrecte.

    RewriteRule ^/(.*)$ index.php?q=$1 [L,QSA]
    
    

    doit devenir

    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.