web-dev-qa-db-fra.com

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 réécriture de mod.

J'ai 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 sont en train de travailler sur mon hébergement, elles devraient donc être ok, alors ma question est la suivante: y at-il quelque chose de caché dans la configuration d'Apache, qui pourrait bloquer la réécriture du mod?

455
Jakub Arnold

Pour 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 le fichier .htaccess suivant.

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

Le fichier .htaccess ci-dessus (s'il est placé dans votre DocumentRoot) redirige tout le trafic vers un fichier index.php dans le DocumentRoot à moins que le fichier n'existe.

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

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

Tout fichier existant dans httpdocs sera servi au demandeur à l'aide du .htaccess présenté ci-dessus. Cependant, tout le reste sera redirigé vers httpdocs/index.php. Vos fichiers d'application dans includes/app ne seront pas accessibles.

968
Jonathan Mayhak

Pour ma situation, j'avais

RewriteEngine On

dans mon .htaccess, avec le module en cours de chargement, et cela ne fonctionnait pas.

La solution à mon problème consistait à modifier mon entrée vhost pour inclure

AllowOverride all

dans la section <Directory> pour le site en question.

224
Mike Wazowski

Essayez de régler: AllowOverride All.


Le deuxième problème le plus courant est de ne pas avoir activé la réécriture de mod: a2enmod rewrite puis de redémarrer Apache.

80
Jarrod

Si cela ne fonctionne pas, essayez d’éditer/etc/Apache2/sites-enabled/000-default

presque au sommet, vous trouverez

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

Remplacez AllowOverride None par AllowOverride All

cela a fonctionné pour moi

74
Martin Sax

Dans Ubuntu:

Courir:

a2enmod rewrite

puis:

service Apache2 restart

mod_rewrite sera maintenant activé!

43
nickleefly

Vous pouvez résoudre ce problème de nombreuses manières si vous en connaissez la racine.

Problème 1

Tout d’abord, il se peut que votre module Apache ne soit pas installé ou activé, ce qui peut poser problème.

Pour cette raison, vous devez l'activer comme suit

  1. Ouvrez votre console et tapez-y ceci:

    Sudo a2enmod rewrite

  2. Redémarrez votre serveur Apache.

    service Apache2 restart

Problème 2

  1. Si cela ne fonctionne pas, vous pouvez également, si cela ne fonctionne pas, modifier la règle de remplacement à partir du fichier de configuration Apache (Apache2.conf, http.conf ou le fichier 000-default).

  2. Recherchez le "Répertoire/var/www /"

  3. Changer le "Ne remplacer aucun" par "Tout remplacer"

Problème 3

Si vous obtenez une erreur indiquant que le module de réécriture est introuvable, votre module userdir n'est probablement pas activé. Pour cette raison, vous devez l'activer.

  1. Tapez ceci dans la console:

    Sudo a2enmod userdir

  2. Ensuite, essayez d'activer le module de réécriture s'il n'est toujours pas activé (comme mentionné ci-dessus).

Pour en savoir plus, vous pouvez visiter ce site: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html

28
Kripa Jayakumar

Ouvrez le terminal et tapez a2enmod rewrite, cela activera votre module mod_rewrite pour Apache.

Ensuite, allez à /etc/Apache2/sites-available et éditez le fichier par défaut. (Pour cela, vous devez disposer d'autorisations d'accès en écriture sur ce fichier et sur le dossier sites-disponibles.)

Remplacer ci-dessous par les lignes existantes 4 à 14

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>

Maintenant, redémarrez votre Apache par /etc/init.d/Apache2 restart ou service Apache2 restart

Reprenez le test de l'URL propre et cette fois, il sera passé.

26
Umesh Patil

La nouvelle version d'Apache a changé d'une certaine manière. Si votre version d'Apache est la version 2.4, vous devez vous rendre à /etc/Apache2/. Il y aura un fichier nommé Apache2.conf. Vous devez éditer celui-là (vous devriez avoir la permission root). Changer le texte du répertoire comme ceci

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Maintenant, redémarrez Apache.

service Apache2 reload

Esperons que ça marche.

23
Ijas Ahamed N

<edit>

Vous venez de remarquer que vous avez dit mod_rewrite.s au lieu de mod_rewrite.so - espérons que c'est une faute de frappe dans votre question et non dans le fichier httpd.conf! :)

</ edit>

Je suis plus habitué à utiliser Apache sous Linux, mais je devais le faire l'autre jour.

Tout d’abord, jetez un coup d’œil dans votre répertoire d’installation Apache. (Je supposerai que vous l'avez installé dans "C:\Program Files" ici)

Jetez un coup d'œil dans le dossier: "C:\Program Files\Apache Software Foundation\Apache2.2\modules" et assurez-vous qu'il existe un fichier appelé mod_rewrite.so. (Il devrait être, il est fourni dans le cadre de l'installation par défaut.

Ensuite, ouvrez "C:\Program Files\Apache Software Foundation\Apache2.2\conf" et ouvrez httpd.conf. Assurez-vous que la ligne:

#LoadModule rewrite_module modules/mod_rewrite.so

est non commenté:

LoadModule rewrite_module modules/mod_rewrite.so

De plus, si vous souhaitez activer le RewriteEngine par défaut, vous pouvez ajouter quelque chose comme:

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

à la fin de votre fichier httpd.conf.

Sinon, assurez-vous de spécifier

RewriteEngine On

quelque part dans votre fichier .htaccess.

15
Danny Battison

Je viens de faire ça

Sudo a2enmod rewrite

alors vous devez redémarrer le service Apache en suivant la commande

Sudo service Apache2 restart
5
user3470929

Ancien fil de discussion, je veux juste dire que AllowOverride ne soit pas défini sur tous les modes, mais plutôt sur le mod spécifique que vous souhaitez utiliser,

AllowOverride mod_rewrite mod_mime

Et cette ligne devrait être non commentée

LoadModule rewrite_module modules/mod_rewrite.so

Références

3
Abhishek Gurjar

Utilisez la commande ci-dessous

Sudo a2enmod rewrite

Et le redémarrage d'Apache via la commande ci-dessous

Sudo service Apache2 restart
3
prasoon

Il y a évidemment plus d'une façon de le faire, mais je suggérerais d'utiliser le plus standard:

ErrorDocument 404 /index.php?page=404
3
Michael Cramer

La première fois que j'ai eu du mal avec les règles mod_rewrite ignorant mon trafic, j'ai appris (avec frustration) que je les avais placées dans le mauvais <VirtualHost>, ce qui signifiait que mon trafic ignorerait all d'eux, peu importe leur qualité d'écriture. Assurez-vous que cela ne vous arrive pas:

# Change the log location to suit your system. RewriteLog /var/log/Apache-rw.log RewriteLogLevel 2

Ces paramètres s'activeront si vous effectuez un redémarrage progressif d'Apache. Vous pourrez ainsi les recycler et surveiller étroitement le comportement mod_rewrite. Une fois que votre problème est résolu, abaissez RewriteLogLevel et célébrez.

Dans 100% de mon expérience, j'ai constaté que le RewriteLog m'a permis de découvrir le problème avec mes règles de réécriture. Je ne peux pas le recommander assez. Bonne chance dans votre dépannage!

En outre, ce favori est votre meilleur ami: http://httpd.Apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog

3
Garrett Ellis

Ce qui a fonctionné pour moi (à Ubuntu):

Sudo su
cd /etc/Apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

Comme déjà mentionné, assurez-vous que AllowOverride all est défini dans la section correspondante de /etc/Apache2/sites-available/default

2
Benubird