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?
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.
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.
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.
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
Dans Ubuntu:
Courir:
a2enmod rewrite
puis:
service Apache2 restart
mod_rewrite
sera maintenant activé!
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
Ouvrez votre console et tapez-y ceci:
Sudo a2enmod rewrite
Redémarrez votre serveur Apache.
service Apache2 restart
Problème 2
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).
Recherchez le "Répertoire/var/www /"
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.
Tapez ceci dans la console:
Sudo a2enmod userdir
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
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é.
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.
<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.
Je viens de faire ça
Sudo a2enmod rewrite
alors vous devez redémarrer le service Apache en suivant la commande
Sudo service Apache2 restart
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
Utilisez la commande ci-dessous
Sudo a2enmod rewrite
Et le redémarrage d'Apache via la commande ci-dessous
Sudo service Apache2 restart
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
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
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