Apache - mod_rewrite

bonjour,

je suis sous debian wheezy et j’ai un soucis avec le rewrite_mod que je n’arrive pas à faire fonctionner.
le module semble bien activé, il est bien dans [mono]/etc/apache2/mods-enabled/[/mono]
lorsque je fait un phpinfo(), le module apparaît normalement dans la partie Loaded Modules, mais cela ne fonctionne pas.

je teste avec un code qui fonctionne correctement en ligne et que j’ai également testé en local sur une machine avec windows.

j’ai également modifié le fichier [mono]/etc/apache2/sites-avaible/default[/mono]

DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
j’utilise me module userdir, est-ce que cela peut venir de là ?
il y a peut-être des modifs à faire ?

merci d’avance de votre aide.

tony

mod_rewrite, c’est pour les réécritures d’URLs qu’on place dans les .htaccess ?

Si c’est le cas, c’est ptet le contenu de ton .htaccess qui ne convient pas.

Tu peux aussi scruter les logs d’erreur d’Apache.

le htaccess est bon puisqu’il fonctionne sur d’autres poste que le mien.
voici quand même le code que je teste.

RewriteEngine on RewriteRule produit/([a-zA-Z0-9\-]+)-([0-9]+) produit.php?u=$1&a=$2

voici le style des mes liens [mono]http://localhost/~tony/rewrite/produit/pdt1-1[/mono]

les logs sont :

tous ces codes fonctionnent lorsqu’ils sont en ligne et sur un poste sous windows.

merci de ces réponses

j’oubliais, mon serveur local me renvoie

[code]Not Found

The requested URL /~tony/rewrite/produit/pdt1-1 was not found on this server.[/code]

personne n’a déjà eu le problème où une idée pour essayer de la résoudre ?

As-tu résolu le problème ?

Pour voir la liste des modules activés : apachectl -L

merci de relancer :slightly_smiling:
non, je suis toujours bloqué

cette commande ne retourne rien concernant le mode rewrite pour la commande [mono]a2enmod rewrite[/mono]
Module rewrite already enabled

je suis preneur de toutes vos idées !

Un RewriteBase mal placé ?

Voici ce que tu dois faire.

  1. Tu avais modifié le fichier /etc/apache2/sites-avaible/default.
    => Il ne fallait pas le modifier, car c’est le virtualhost par défaut du serveur web,
    il n’est donc pas fait pour les userdirs. Donc remet comme c’était avant.

  2. En root, activer le module user_dir en tapant :

# a2enmod userdir
  1. Ensuite, activer php pour userdir en commentant le paramètre php_admin_value engine Off dans le fichier /etc/apache2/mods-available/php5.conf :
...
<IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            #Je commente la ligne ci-dessous pour activer php pour userdir
            #php_admin_value engine Off
        </Directory>
    </IfModule>
...

Remarque importante :
As-tu remarqué dans ce fichier la ligne <Directory /home//public_html> ?
=> cela veut dire que par défaut, les sites des utilisateurs unix doivent être dans /home/
/public_html.
Donc pour l’utilisateur tony, le site de l’utilisateur tony doit être dans le dossier /home/tony/public_html.
Donc il faudra créer ce dossier public_html plus tard.

  1. Ensuite donner à userdir la possibilité d’utiliser les fichiers .htaccess en ajoutant All à la ligne AllowOverride FileInfo AuthConfig Limit Indexes dans le fichier /etc/apache2/mods-available/userdir.conf, comme ceci :
AllowOverride FileInfo AuthConfig Limit Indexes All
  1. Ensuite activons le module rewrite pour que apache puisse utiliser la réécriture d’url via les .htaccess :
a2enmod rewrite
  1. Ensuite recharger et redémarrer apache pour que apache prennent en compte toutes les modifications que nous venons de faire :
/etc/init.d/apache2 reload;/etc/init.d/apache2 restart
  1. Ensuite testons :

1ère test : vérifier que l’userdir est bien activé pour l’utilisateur tony.

Pour cela, ne te mets plus en root, mais mets-toi en utilisateur tony (su tony), puis créer un dossier public_html dans /home/tony/.
Ensuite créer dans ce dossier /home/tony/public_html/ un fichier index.php avec un contenu banal (par exemple <?php echo "test";?>, puis tapes dans ton navigateur préféré l’adresse localhost/~tony/.
La page web de index.php devrait s’afficher correctement.

2ème test : vérifier que l’utilisation du fichier .htaccess est possible pour l’utilisateur tony.

Pour cela, toujours en tant que utilisateur tony, créer un fichier .htaccess dans /home/tony/public_html, et mets les directives de base de la réécriture d’url :
Contenu du fichier /home/tony/.htaccess :

Options +FollowSymLinks
RewriteEngine On

Et comme les urls réécrites du site auront comme base localhost/~tony/, alors on ajoute cette ligne dans
ce fichier .htaccess :

RewriteBase /~tony/

Ensuite, on peut mettre les réécriture d’urls dans ce fichier .htaccess :
Pour localhost/~tony/rewrite/produit/pdt1-1, ce serait :

RewriteRule rewrite/produit/([a-zA-Z0-9\-]+)-([0-9]+) rewrite/produit/produit.php?u=$1&a=$2 [NC,L]

=> Bien sûr, les dossiers rewrite et produits doivent être présent dans dans le dossier /home/tony/public_html/,
ainsi que le fichier produit.php (donc le chemin complet est /home/tony/public_html/rewrite/produit/produit.php).

Donc le fichier .htaccess complet dans /home/tony/public_html devrait être :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /~tony/

RewriteRule rewrite/produit/([a-zA-Z0-9\-]+)-([0-9]+) rewrite/produit/produit.php?u=$1&a=$2 [NC,L]

Puis tapes dans ton navigateur localhost/~tony/rewrite/produit/pdt1-1, et la page web devrait s’afficher correctement.

PS : supprime tous les anciens fichiers .htaccess que t’as pu créer dans /home/tony.

fluo et Zorgluboudou merci de ces réponses. :smiley:
Je teste tout cela, j’espère ce soir, et je vous tiens au courant.

bon, cela ne fonctionne toujours pas. je vais faire de nouveaux tests ce soir pour vérifié que je n’ai pas fait de bêtises, mais il n’y a pas de changements, j’ai toujours l’erreur 404 lorsque j’essaie d’afficher ma page.

j’ai commencé par désinstaller complètement apache et php, comme j’avais déjà fait pas mal de manip sur les différents fichiers de configuration, j’ai préféré repartir d’une installation propre.
j’ai ensuite suivi toutes les instructions de fluo. tout c’est passé sans problèmes.

le php fonctionne correctement dans mon dossier public_html, par contre pas le rewrite.
j’ai vérifié sur la page phpinfo, il mode apparaît bien dans les modules chargés.

j’ai essayé de réactiver les logs d’erreurs du mod rewrite mais je n’ai pas retrouvé la manip à faire. il me semblait qu’il fallait créer un fichier [mono]/etc/apache2/mod-enable/rewrite.conf[/mono], mais impossible de remettre la main sur la config…

je viens de revoir toutes mes configs, je ne vois pas ce qui bloque :confused:

en tout cas merci de votre aide !

  1. Poste ton fichier .htaccess ici.
  2. Où as tu placé ton ficher .htaccess (donne le chemin complet)
  3. Est-ce qu’il y a d’autres fichiers .htaccess dans le site qui bloquent ?
  4. Fait un ls -l /chemin/de/ton/fichier/.htaccess
  5. Recharge la page avec Ctrl+F5, puis poste les logs d’erreurs correspondants (tail -n 50 /var/log/apache2/error.log)

merci beaucoup de ton aide, je vais faire tout cela ce soir.

sinon, quelqu’un sait me dire comment activer les logs du mod_rewrite ?
je ne retrouve plus comment je les avais activé…

tony

bonsoir,

j’ai modifié le test pour le simplifier.
j’ai mis le fichier .htaccess à la racine /home/tony/public_html/

RewriteEngine On RewriteRule (.*).html $1.php

la commande [mono]ls -l /home/tony/public_html/.htaccess[/mono] me retourne :
[mono]-rwxr-xr-x 1 tony tony 45 déc. 6 20:29 public_html/.htaccess[/mono]

dans ce même répertoire, j’ai placé un fichier phpinfo.php

<?php phpinfo(); ?>

si j’essaie [mono]http://localhost/~tony/infos.html[/mono]
cela me retourne :

[code]Not Found

The requested URL /home/tony/public_html/infos.php was not found on this server.
Apache/2.2.22 (Debian) Server at localhost Port 80[/code]

j’ai fait le test aujourd’hui avec xp, cela fonctionne :wink:

enfin, voici l’extrait du log du fichier d’erreurs :

[Thu Dec 05 21:57:52 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 21:57:52 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 21:57:52 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 21:58:29 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 21:58:29 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 21:58:29 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:06:49 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:06:49 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:06:49 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:06:49 2013] [error] [client ::1] File does not exist: /var/www/favicon.ico [Thu Dec 05 22:06:49 2013] [error] [client ::1] File does not exist: /var/www/favicon.ico [Thu Dec 05 22:18:04 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:18:04 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:18:04 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:18:04 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:18:04 2013] [error] [client ::1] File does not exist: /home/tony/public_html/tests/php/bdd/assets, referer: http://localhost/~tony/tests/php/bdd/select.php [Thu Dec 05 22:19:15 2013] [error] [client ::1] File does not exist: /var/www/home [Thu Dec 05 22:19:36 2013] [error] [client ::1] File does not exist: /var/www/home, referer: http://localhost/~tony/tests/ [Thu Dec 05 22:54:22 2013] [error] [client ::1] Negotiation: discovered file(s) matching request: /home/tony/public_html/rewrite/produit (None could be negotiated)., referer: http://localhost/~tony/rewrite/ [Thu Dec 05 22:54:27 2013] [error] [client ::1] Negotiation: discovered file(s) matching request: /home/tony/public_html/rewrite/produit (None could be negotiated)., referer: http://localhost/~tony/rewrite/ [Thu Dec 05 23:10:21 2013] [notice] caught SIGTERM, shutting down [Thu Dec 05 23:32:05 2013] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u5 configured -- resuming normal operations [Fri Dec 06 07:20:58 2013] [error] [client ::1] script '/home/tony/public_html/phpinfo.php' not found or unable to stat [Fri Dec 06 07:20:58 2013] [error] [client ::1] File does not exist: /var/www/favicon.ico [Fri Dec 06 07:20:58 2013] [error] [client ::1] File does not exist: /var/www/favicon.ico [Fri Dec 06 07:30:13 2013] [error] [client ::1] File does not exist: /home/tony/public_html/rewrite/dist, referer: http://localhost/~tony/rewrite/ [Fri Dec 06 07:30:13 2013] [error] [client ::1] File does not exist: /home/tony/public_html/rewrite/dist, referer: http://localhost/~tony/rewrite/ [Fri Dec 06 07:30:13 2013] [error] [client ::1] File does not exist: /home/tony/public_html/rewrite/dist, referer: http://localhost/~tony/rewrite/ [Fri Dec 06 07:30:13 2013] [error] [client ::1] File does not exist: /home/tony/public_html/rewrite/dist, referer: http://localhost/~tony/rewrite/ [Fri Dec 06 07:30:14 2013] [error] [client ::1] File does not exist: /home/tony/public_html/rewrite/dist, referer: http://localhost/~tony/rewrite/ [Fri Dec 06 07:30:18 2013] [error] [client ::1] Negotiation: discovered file(s) matching request: /home/tony/public_html/rewrite/produit (None could be negotiated)., referer: http://localhost/~tony/rewrite/ [Fri Dec 06 07:35:25 2013] [notice] Graceful restart requested, doing restart [Fri Dec 06 07:35:25 2013] [error] (9)Bad file descriptor: apr_socket_accept: (client socket) [Fri Dec 06 07:35:25 2013] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u5 configured -- resuming normal operations [Fri Dec 06 07:35:26 2013] [notice] caught SIGTERM, shutting down [Fri Dec 06 07:35:27 2013] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u5 configured -- resuming normal operations [Fri Dec 06 07:54:38 2013] [notice] caught SIGTERM, shutting down [Thu Dec 05 23:55:46 2013] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u5 configured -- resuming normal operations [Fri Dec 06 07:56:14 2013] [notice] caught SIGTERM, shutting down [Wed Dec 27 01:00:57 2006] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u5 configured -- resuming normal operations [Fri Dec 06 20:27:21 2013] [error] [client ::1] File does not exist: /home/tony/public_html/css, referer: http://localhost/~tony/ [Fri Dec 06 20:27:21 2013] [error] [client ::1] File does not exist: /home/tony/public_html/img, referer: http://localhost/~tony/ [Fri Dec 06 20:27:21 2013] [error] [client ::1] File does not exist: /var/www/favicon.ico [Fri Dec 06 20:27:21 2013] [error] [client ::1] File does not exist: /var/www/favicon.ico [Fri Dec 06 20:30:15 2013] [error] [client ::1] File does not exist: /var/www/home [Fri Dec 06 20:37:22 2013] [error] [client ::1] File does not exist: /var/www/home [Fri Dec 06 20:41:18 2013] [error] [client ::1] File does not exist: /var/www/home [Fri Dec 06 20:30:15 2013] [error] [client ::1] File does not exist: /var/www/home [Fri Dec 06 20:37:22 2013] [error] [client ::1] File does not exist: /var/www/home [Fri Dec 06 20:41:18 2013] [error] [client ::1] File does not exist: /var/www/home

en mettant le code (toujours dans /home/tony/public_html)

RewriteEngine On RewriteBase /~tony/ RewriteRule (.*).html $1.php

j’obtiens le message

Not Found

The requested URL /~tony/phpinfo.php was not found on this server.
Apache/2.2.22 (Debian) Server at localhost Port 80

Le (.) est une capture. Cela veut dire que lorsque tous ce qui est dans (.) est capturé, la variable $1 est remplacé par la capture, c’est pour cette raison que apache ne trouve pas infos.php.

oui, c’est le but, appeler une page php en mettant l’extension html.
cela fonctionne très bien sur xp et sur un site en ligne.

j’ai l’impression que le mod_rewrite ne fait pas le lien avec le dossier public_html, il doit y avoir un mauvais paramètre, mais je ne vois pas où…

c’est bon, cela fonctionne !
merci