524 votes

Comment activer mod_rewrite pour Apache 2.2

J'ai une nouvelle installation d'Apache 2.2 sur ma machine Vista, tout fonctionne bien, sauf le mod rewrite.

J'ai décommenté

LoadModule rewrite_module modules/mod_rewrite.s

mais aucune de mes règles de réécriture ne fonctionne, même les plus simples comme

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

Toutes les règles que j'utilise fonctionnent sur mon hébergement, elles devraient donc être correctes. Ma question est donc la suivante : y a-t-il un élément caché dans la configuration d'Apache qui pourrait bloquer la réécriture des modules ?

1 votes

En fait, le problème était que j'avais un mauvais chemin, car ${DOCUMENT_ROOT} pointait vers le répertoire racine, ce qui était correct sur l'hébergement, mais faux sur le local, donc le problème n'était pas seulement RewriteEngine On, que j'avais déjà

0 votes

Pouvez-vous modifier la réponse acceptée en celui-ci ? L'auteur de la réponse acceptée actuellement a admis qu'elle n'était pas assez bonne.

1 votes

Comment activer mod_rewrite dans Ubuntu 12.04 LTS (devrait fonctionner dans Debian aussi) . Cela montre l'installation ET l'activation, les tutoriels ci-dessous ne le font étonnamment pas :(

1097voto

Jonathan Mayhak Points 4183

Afin d'utiliser mod_rewrite vous pouvez taper la commande suivante dans le terminal :

sudo a2enmod rewrite

Redémarrez apache2 après

sudo /etc/init.d/apache2 restart

ou

sudo service apache2 restart

ou selon la nouvelle méthode unifiée de contrôle du système

sudo systemctl restart apache2

Ensuite, si vous le souhaitez, vous pouvez utiliser les éléments suivants .htaccess fichier.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Ce qui précède .htaccess (s'il est placé dans votre DocumentRoot ) redirigera tout le trafic vers un index.php dans le fichier DocumentRoot sauf si le fichier existe.

Ainsi, disons que vous avez la structure de répertoire suivante et que httpdocs est le répertoire DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

Tout fichier qui existe dans httpdocs sera servi au demandeur en utilisant la commande .htaccess montré ci-dessus, cependant, tout le reste sera redirigé vers httpdocs/index.php . Les fichiers de votre application dans includes/app ne sera pas accessible.

16 votes

Les idées présentées ici sont correctes pour une CLI UNIX mais les commandes ne fonctionnent que pour les distributions Linux basées sur Debian et non pour l'environnement Windows du PO.

17 votes

La réécriture a2enmod a fait le travail

105 votes

Remarque supplémentaire : vous devez également vous assurer que la configuration de votre site a AllowOverride All afin que le .htaccess pour être lu du tout.

243voto

Mike Wazowski Points 881

Pour ma situation, j'avais

RewriteEngine On

dans mon .htaccess et le module est chargé, mais cela ne fonctionne pas.

La solution à mon problème a été de modifier l'entrée de mon serveur virtuel pour y inclure

AllowOverride all

dans le <Directory> pour le site en question.

11 votes

En effet, même avec a2enmod rewrite & RewriteEngine On dans le .htaccess - l'existence de AllowOverride all dans le fichier VirtualHost l'empêchera de fonctionner - c'est ce qui m'a surpris, en le changeant en AllowOverride all a fonctionné comme un charme :)

9 votes

Le débutant ici où se trouve le fichier VirtualHost ?

3 votes

C'est ce qu'il faut faire... J'avais tout réglé sauf ça.

92voto

Jarrod Points 3526

Essayez de régler : AllowOverride All .


Le deuxième problème le plus courant est que le mod rewrite n'est pas activé : a2enmod rewrite et ensuite redémarrer apache.

0 votes

Ceci devrait être la réponse n°1 car elle résout un problème qui se produit dans une installation ubuntu par défaut !

2 votes

Cela permettra à .htaccess de prendre le pas sur toute autre configuration d'Apache. Ceci n'est pas recommandé.

1 votes

Oui :) c'était aussi mon problème, mais c'est ici que vous expliquez aux novices comme moi que ce "AllowOverride All" se trouve dans /etc/apache2/sites-available/[sitename].conf et [sitename-ssl].conf. J'ai dû faire une deuxième recherche grâce à vous :D, merci au passage !

91voto

Martin Sax Points 313

Si rien de ce qui précède ne fonctionne, essayez de modifier le fichier /etc/apache2/sites-enabled/000-default.

presque en haut, vous trouverez

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

Changez le AllowOverride None à AllowOverride All

cela a fonctionné pour moi

0 votes

Modification de l'erreur de /laravel/public/authors was not found on this server à /index.php was not found on this server

1 votes

Impossible de trouver <Répertoire>, seulement <Hôte virtuel*:80>.

1 votes

@NicolasS.Xu placez ceci dans la balise <VirtualHost *:80>.

49voto

nickleefly Points 1232

Dans Ubuntu :

Cours :

a2enmod rewrite

et ensuite :

service apache2 restart

mod_rewrite sera désormais activé !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X