URL: https://linuxfr.org/forums/linux-general/posts/apache-mod_rewrite-et-directory
Title: Apache, mod_rewrite et Directory
Authors: Spack
Date: 2012年06月04日T17:46:12+02:00
Tags: debian
Score: 0
Salut,
Je tente de ré-écrire toute URL ne désignant pas un fichier comme un argument au fichier index.php` et 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 :
```apache
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
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^/(.*) http://www.example.com/1ドル [L,R=301]
AllowOverride None
Options -Indexes +FollowSymLinks
DirectoryIndex index.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^/(.*)$ index.php?q=1ドル [L,QSA]
```
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 :
```text
(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é ?