Comment activer mod_rewrite pour Apache 2.2

474

J'ai une nouvelle installation d'Apache 2.2 sur ma machine Vista, tout fonctionne bien, sauf la réécriture du 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 fonctionnent sur mon hébergement, donc elles devraient être correctes, donc ma question est, y a-t-il quelque chose de caché dans la configuration d'apache, qui pourrait bloquer la réécriture du mod?

Jakub Arnold
la source
1
en fait, le problème était que j'avais un mauvais chemin, parce que $ {DOCUMENT_ROOT} m'a dirigé vers le répertoire racine qui était correct sur l'hébergement, mais incorrect sur local, donc le problème n'était pas seulement RewriteEngine On, que j'avais déjà ..
Jakub Arnold
Pouvez-vous s'il vous plaît changer la réponse acceptée à celle-ci ? L'auteur de la réponse acceptée actuelle a admis que ce n'était pas suffisant.
Shadow Wizard est Ear For You
1
Comment activer mod_rewrite dans Ubuntu 12.04 LTS (devrait également fonctionner dans Debian) . Cela montre l'installation ET l'activation, les tutoriels ci-dessous ne le font étonnamment pas :(
Sliq
3
Je conseillerais fortement à tous ceux qui souhaitent activer les directives mod_rewrite dans les fichiers .htacces au AllowOverride FileInfolieu de tout autoriser, comme le suggèrent TOUTES les réponses sur cette page. Triste de voir toutes ces réponses adopter l'approche aussi longue que cela fonctionne, c'est correct au lieu d'essayer de comprendre les conséquences de la «solution» proposée. Essayez de comprendre ce que vous faites sur votre serveur et comment limiter les privilèges que vous venez de céder AllowOverride All. RTFM! , il est clair sur le sujet.
RemyNL
1
@Black C'est dans le fichier de configuration Apache nommé httpd.conf. Sur mon PC, il se trouve dans le répertoire C: \ xampp \ apache \ conf, car j'ai installé Apache avec XAMPP.
Lex Soft

Réponses:

1005

Pour l'utiliser, mod_rewritevous 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 de contrôle de système unifié

sudo systemctl restart apache2

Ensuite, si vous le souhaitez, vous pouvez utiliser le .htaccessfichier suivant .

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

Le .htaccessfichier ci-dessus (s'il est placé dans votre DocumentRoot) redirigera tout le trafic vers un index.phpfichier dans DocumentRootle fichier sauf si le fichier existe.

Donc, disons que vous avez la structure de répertoire suivante et httpdocs est le 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 à l'aide de l' .htaccessillustration ci-dessus, cependant, tout le reste sera redirigé vers httpdocs/index.php. Vos fichiers d'application ne includes/appseront pas accessibles.

Jonathan Mayhak
la source
15
Les idées ici sont correctes pour une CLI UNIX mais les commandes ne fonctionnent que pour une distribution Linux basée sur Debian et non pour un environnement Windows de l'OP.
Jason Rikard
17
a2enmod rewrite a fait le travail
Dr Casper Black
98
Remarque supplémentaire: vous devez également vous assurer que la configuration de votre site a AllowOverride Allpour que le .htaccessfichier soit lu du tout.
Adam Rosenfield
2
@Dennis, vous pouvez utiliser la réécriture a2dismod
Jonathan Mayhak
3
comment utiliser a2enmod rewritedans windows?
Naman
229

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 était de modifier mon entrée vhost pour l'inclure

AllowOverride all

dans la <Directory>section du site en question.

Mike Wazowski
la source
10
En effet, même avec a2enmod rewrite& RewriteEngine Ondans le .htaccess- l'existence de AllowOverride alldans le fichier VirtualHost l'empêchera de fonctionner - c'est ce qui m'a attrapé, en le changeant pour AllowOverride allfonctionner comme un charme :)
HeavenCore
9
débutant ici .. où est le fichier VirtualHost?
davneet
3
C'est la voie à suivre ... J'avais tout le reste mis à part cela.
arrayown
2
La AllowOverridedirective détermine les "types de directives autorisées dans les .htaccessfichiers". En outre, "Lorsque cette directive est définie sur None, les .htaccessfichiers sont complètement ignorés. Dans ce cas, le serveur n'essaiera même pas de lire les .htaccessfichiers dans le système de fichiers." Documents
John Erck
Cela m'a corrigé - j'avais un problème avec les permaliens de WordPress qui ne fonctionnaient pas correctement. Si vous le faites a2enmod rewrite, puis dans le fichier VirtualHosts, changez «AllowOverride None» en «AllowOverride All», cela devrait fonctionner. Le fichier VirtualHosts s'applique si vous exécutez plusieurs noms de domaine sur le même serveur (et la même adresse IP). Vous l'auriez configuré pour configurer le domaine.
Jason Preston
83

Essayez de régler: AllowOverride All.


Le deuxième problème le plus courant n'est pas d'activer la réécriture de mod: a2enmod rewritepuis redémarrez apache.

Jarrod
la source
Cela devrait être la réponse n ° 1 car elle résout un problème qui se produit dans une installation Ubuntu par défaut!
Sliq
1
Cela permettra à .htaccess de remplacer toute autre configuration Apache. Ce n'est pas recommandé.
Bhargav Nanekalva
Oui :) c'était aussi mon problème, mais voici l'endroit où vous expliquez aux recrues comme moi que ce "AllowOverride All" se trouve dans /etc/apache2/sites-available/[sitename 4,0.conf et [sitename-ssl] .conf. J'ai dû faire une deuxième recherche à cause de toi: D, merci en passant!
MetaTron
77

Si aucun des travaux ci-dessus n'essaye 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 le AllowOverride NoneparAllowOverride All

cela a fonctionné pour moi

Martin Sax
la source
Erreur /laravel/public/authors was not found on this server/index.php was not found on this server
modifiée
ne trouve pas <Directory>, seulement <VirtualHost *: 80>
Nicolas S.Xu
1
@ NicolasS.Xu place cela dans la balise <VirtualHost *: 80>
wimdetr
J'ai fait la même chose mais j'ai ajouté une nouvelle section <Directory /var/www/html>pour appliquer la règle à partir de ce dossier et uniquement.
Louis Loudog Trottier
44

Dans Ubuntu:

Courir:

a2enmod rewrite

et alors:

service apache2 restart

mod_rewrite sera désormais activé!

nickleefly
la source
28

Il existe de nombreuses façons de résoudre ce problème, si vous connaissez la racine du problème.

Problème 1

Premièrement, cela peut être un problème avec votre apache n'ayant pas le module mod_rewrite.c installé ou activé.

Pour cette raison, vous devez l'activer comme suit

  1. Ouvrez votre console et saisissez-la, ceci:

    sudo a2enmod rewrite

  2. Redémarrez votre serveur apache.

    service apache2 restart

Problème 2

  1. Vous pouvez également, en plus de ce qui précède, si cela ne fonctionne pas, devoir modifier la règle de remplacement à partir du fichier de conf apache (apache2.conf, http.conf ou fichier 000-default).

  2. Localisez "Répertoire / var / www /"

  3. Remplacez «Ne rien remplacer» 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. Essayez ensuite 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

Kripa Jayakumar
la source
2
Grande ventilation du problème.
Banago
Ne l'utilisez pas AllowOverride Allcar cela activera trop de fonctionnalités de dangerours (comme l'utilisation de scripts Perl). Utilisez plutôtAllowOveride Options
Marki555
28

La nouvelle version d'apache a changé d'une manière ou d'une autre. Si votre version apache est 2.4, vous devez vous rendre sur /etc/apache2/. Il y aura un fichier nommé apache2.conf. Vous devez modifier celui-ci (vous devez avoir l'autorisation root). Changer le texte du répertoire comme ceci

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

Redémarrez maintenant apache.

service apache2 reload

Esperons que ça marche.

Ijas Ahamed N
la source
Ceci est la réponse à jour.
paulc
1
Si vous êtes en 2019 et au-delà, veuillez voter pour cette réponse :)
Luiz Cavalcanti
27

Terminal ouvert et typin a2enmod rewrite, il activera votre mod_rewritemodule pour Apache.

Ensuite, allez dans /etc/apache2/sites-availableet modifiez le fichier par défaut. (Pour cela, vous devez disposer d'autorisations accessibles en écriture sur ce fichier et le dossier disponible sur les sites.)

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 restartouservice apache2 restart

Reprenez le test d'URL propre et cette fois, il sera réussi.

Umesh Patil
la source
15

<edit>

Je viens de remarquer que vous avez dit mod_rewrite.s au lieu de mod_rewrite.so - j'espère 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 j'ai dû le faire l'autre jour.

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

Jetez un œil dans le dossier: "C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ modules" et assurez-vous qu'il y a un fichier appelé mod_rewrite.so dedans. (Il devrait l'ê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

n'est pas commenté:

LoadModule rewrite_module modules/mod_rewrite.so

De plus, si vous souhaitez activer 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.

Danny Battison
la source
@gabehabe votre avatar avait juste l'air de tenir une icône mon doc, lol
Jonathan dos Santos
5

Je viens de faire ça

sudo a2enmod rewrite

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

sudo service apache2 restart
user3470929
la source
4

Ancien thread, je veux juste mettre qui ne définit pas AllowOverride à tous, utilisez plutôt le mod spécifique que vous souhaitez utiliser,

AllowOverride mod_rewrite mod_mime

Et cette ligne doit être non commentée

LoadModule rewrite_module modules/mod_rewrite.so

Réfrences

Abhishek Gurjar
la source
4

Utiliser la commande ci-dessous

sudo a2enmod rewrite

Et le redémarrage apache via la commande ci-dessous

sudo service apache2 restart
prasoon
la source
3

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
Michael Cramer
la source
3

La première fois que j'ai eu du mal avec les règles de mod_rewrite ignorant mon trafic, j'ai appris (frustrant) que je les avais mal placées <VirtualHost>, ce qui signifiait que mon trafic les ignorerait toutes , peu importe leur niveau 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 gracieux d'Apache, vous pouvez donc les recycler et surveiller de près le comportement de mod_rewrite. Une fois votre problème résolu, baissez le RewriteLogLevel et célébrez.

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

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

Garrett Ellis
la source
2

Ce qui a fonctionné pour moi (dans ubuntu):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

Aussi, comme déjà mentionné, assurez-vous qu'il AllowOverride allest défini dans la section/etc/apache2/sites-available/default

Benubird
la source