Comment activer la réécriture de mod pour Apache 2.2
J'ai une nouvelle installation D'Apache 2.2 sur ma machine Vista, Tout fonctionne bien, sauf 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 règles 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 ok, donc ma question Est, y a-t-il quelque chose de caché dans la configuration d'apache, qui pourrait bloquer mod rewrite?
16 réponses
pour utiliser mod_rewrite
vous pouvez taper la commande suivante dans le terminal:
sudo a2enmod rewrite
redémarrer apache2 après
sudo /etc/init.d/apache2 restart
ou
sudo service apache2 restart
ou comme le prévoit le nouveau Système unifié de Contrôle de Façon
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>
ci-dessus .htaccess
fichier (s'il est placé dans votre DocumentRoot
) redirigera tout le trafic vers un fichier index.php
dans le fichier DocumentRoot
à moins que le fichier n'existe.
alors, disons que vous avez la structure de répertoire suivante et que httpdocs est le DocumentRoot
1519170920"
httpdocs/
.htaccess
index.php
images/
hello.png
js/
jquery.js
css/
style.css
includes/
app/
app.php
tout fichier existant dans httpdocs sera signifié au demandeur en utilisant le .htaccess
ci-dessus, cependant, tout le reste sera redirigé vers httpdocs/index.php
. Vos fichiers de demande dans includes/app
ne seront pas accessible.
pour ma situation, j'avais
RewriteEngine On
dans mon .htaccess
, avec le module chargé, et il ne fonctionnait pas.
la solution à mon problème était d'éditer mon entrée vhost à inlcude
AllowOverride all
dans la section <Directory>
pour le site en question.
j'ai écrit à ce sujet dans un article: http://www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu
Essayer de définir: AllowOverride All
.
le deuxième problème le plus courant est que le mod rewrite n'est pas activé: a2enmod rewrite
puis redémarre apache.
Si non des travaux ci-dessus essayez de modifier /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>
changer le AllowOverride None
en AllowOverride All
cela a fonctionné pour moi
Dans Ubuntu:
Run:
a2enmod rewrite
et ensuite:
service apache2 restart
mod_rewrite
sera maintenant activé!
il y a plusieurs façons de résoudre ce problème, si vous connaissez la racine du problème.
Problème 1
tout d'abord, il peut y avoir un problème avec votre apache n'ayant pas le mod_rewrite.module C installé ou activé.
Pour cette raison, vous devez l'activer comme suit:
-
Ouvrez votre console et tapez dedans, ceci:
sudo a2enmod rewrite
-
redémarrez votre serveur apache.
service apache2 restart
problème 2
-
vous pouvez également, en plus de ce qui précède, si cela ne fonctionne pas, changer la règle de surpassement du fichier de conf apache (soit apache2.conf, http.conf , ou 000-fichier par défaut).
-
Localiser "le Répertoire /var/www/"
-
remplacer le " Override None" par" Override All "
problème 3
si vous obtenez une erreur indiquant que le module de réécriture n'est pas trouvé, alors probablement votre module userdir n'est pas activé. Pour cette raison, vous devez l'activer.
-
tapez ceci dans le console:
sudo a2enmod userdir
-
essayez d'activer le module de réécriture s'il n'est 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
ouvrir le terminal et taper a2enmod rewrite
, il activera votre module mod_rewrite
pour Apache.
puis allez à /etc/apache2/sites-available
et éditez le fichier par défaut. (Pour cela, vous devez avoir des permissions en écriture dans ce fichier et dans le dossier des sites disponibles.)
remplacer ci-dessous par les lignes 4 à 14 existantes."
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>
redémarrez maintenant votre apache par /etc/init.d/apache2 restart
ou service apache2 restart
la nouvelle version d'apache a changé d'une manière ou d'une autre. Si votre version apache est 2.4, alors vous devez aller à /etc/apache2/
. Il y aura un fichier nommé apache2.conf
. Vous devez éditer celui-ci (vous devriez avoir la permission de root). Changer le texte du répertoire comme ceci
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
redémarrez apache.
service apache2 reload
J'espère que ça va marcher.
vous avez dit mod_rewrite.s au lieu de mod_rewrite.j'espère que c'est une faute de frappe dans votre question et pas dans le httpd.fichier conf! :)
< / edit>
Je suis plus habitué à utiliser Apache sous Linux, mais j'ai dû le faire l'autre jour.
tout d'abord, jetez un oeil dans votre répertoire D'installation Apache. (Je vais être en supposant que vous l'avez installé à "C:\Program les Fichiers" ici)
regardez dans le dossier: "C:\Program fichiers\Apache Software Foundation\Apache2.2 \ modules " et assurez-vous qu'il y a un fichier appelé mod_rewrite.alors là-dedans. (Il devrait l'être, il est fourni dans le cadre de l'installation par défaut.
suivant, ouvrez "C:\Program fichiers\Apache Software Foundation\Apache2.2 \ conf " et ouvrez httpd.conf. Assurez-vous que la ligne:
#LoadModule rewrite_module modules/mod_rewrite.so
est sans commentaire:
LoadModule rewrite_module modules/mod_rewrite.so
aussi, si vous voulez activer le RewriteEngine par défaut, vous pouvez ajouter quelque chose comme
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
jusqu'à la fin de votre httpd.fichier conf.
si ce n'est pas le cas, veuillez préciser
RewriteEngine On
quelque part dans votre .fichier htaccess.
j'ai juste fait ce
sudo a2enmod rewrite
ensuite, vous devez redémarrer le service apache en suivant la commande
sudo service apache2 restart
il y a évidemment plus d'une façon de le faire, mais je suggère d'utiliser la plus standard:
ErrorDocument 404 /index.php?page=404
la première fois que j'ai lutté avec les règles mod_rewrite ignorant mon trafic, j'ai appris (frustrant) que je les avais placés dans le mauvais <VirtualHost>
, ce qui signifie que mon trafic ignorerait tous d'entre eux peu importe comment ils étaient bien écrits. 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, de sorte que vous pouvez les recycler dans et surveillez étroitement le comportement de mod_rewrite. Une fois votre problème résolu, retournez le niveau de réécriture et fêtez-le.
dans 100% de mon expérience, j'ai constaté que le RewriteLog m'a aidé à découvrir le problème avec mes règles de réécriture. Je ne peux pas le recommander assez. Bonne chance pour le dépannage!
aussi, CE Marque-page est votre meilleur ami: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
je conseillerais fortement à tous ceux qui veulent activer les directives mod_rewrite .htacces utilise AllowOverride FileInfo
au lieu de tout autoriser, comme le suggèrent toutes les réponses sur cette page. C'est triste de voir toutes ces réponses adopter l'approche "aussi longtemps que ça fonctionne" 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 donner suite avec AllowOverride All
. RTFM! , c'est assez clair sur le sujet. Allez les gars, ce n'est pas de la science Rockets, c'est juste un serveur web!
vieux fil, juste pour mettre qui ne fixe pas AllowOverride à tous au lieu d'utiliser mod spécifique que vous voulez utiliser,
AllowOverride mod_rewrite mod_mime
et cette ligne doit être sans commentaire
LoadModule rewrite_module modules/mod_rewrite.so
Réfrences
Ce qui a fonctionné pour moi (ubuntu):
sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
aussi, comme déjà mentionné, assurez-vous que AllowOverride all
est défini dans la section pertinente de /etc/apache2/sites-available/default
utiliser sous la commande
sudo a2enmod rewrite
et le redémarrage d'apache par la commande
sudo service apache2 restart