web-dev-qa-db-fra.com

apache mod_rewrite ne fonctionne pas ou n'est pas activé

J'ai installé rewrite_module et modifié php.ini sur Apache.

Je crée des fichiers rewrite.php et .htaccess, mais cela ne fonctionne pas.

Mes dossiers de système de fichiers comme:

/var/www/html
/var/www/html/test
/var/www/html/test/.htaccess
/var/www/html/test/rewrite.php

/var/www/html/.htaccess content est:

$ cat /var/www/html/test/.htaccess 

RewriteEngine On 
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]

/var/www/html/rewrite.php

$ cat /var/www/html/test/rewrite.php 

<html>
<h2 align=center> 
<?php 
// mod_rewrite Test Page 
// Copyright 2006 Webune.com 
if($_GET['link']==1){echo"You are not using mod_rewrite";} 
elseif($_GET['link']==2){echo"Congratulations!! You are using Apache mod_rewrite";} 
else{echo"Linux Apache mod_rewrte Test Tutorial";} 
?> 
</h2> 
<hr> 
<head> 
<title>How To Test mod_rewrite in Apache Linux Server</title> 
</head> 
<body> 
<p align="center">by <a href="http://www.webune.com">Webune</a></p> 
<p><a href="rewrite.php?link=1">LINK1</a> = rewrite.php?link=1</p>
<p><a href="link2.html">LINK2</a> = link2.html</p> 
<p>How this works: both links are for this same page, except they both are different. link one is without the mod_rewrite and link2 is using mod_rewrite. Link1 show the php file, with with mod_rewrite we are mascarading the php file into a html file. you can use whatever type of extension you want, you can change it to .htm or .shtml etc... all you have to do is to make sure you also chang it in the .htaccess file</p> 
<p>&lt;&lt; <a href="http://www.webune.com/forums/viewtopic-p-62.html">Go back to webune forums.</a></p> 
</body> 
</html>

mod_rewrite.so est installé.

$ ls -l mod_rewrite.so
-rwxr-xr-x 1 root root 59256 Sep 20 23:34 mod_rewrite.so

rewrite_module est chargé.

$ cat /etc/httpd/conf/httpd.conf | grep mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so

Paramètre AllowOverride

$ cat /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
    Options Indexes FollowSymLinks

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>
42
rc1021

Essayez de régler: "AllowOverride All". 

83
Jarrod

S'il vous plaît essayez 

Sudo a2enmod rewrite

ou utilisez la commande de redémarrage Apache correcte

Sudo /etc/init.d/Apache2 restart 
10
ASHOK

Ça marche.

ma solution est:

1.créer un test.conf dans /etc/httpd/conf.d/test.conf

2.écrit une règle, comme:

<Directory "/var/www/html/test">
RewriteEngine On
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]
</Directory>

3. redémarrez votre serveur Apache.

4.essayez à nouveau vous-même.

4
rc1021

Pour que mod_rewrite fonctionne pour moi dans Apache 2.4, j'ai dû ajouter la ligne "Require tout accordé" ci-dessous.

<Directory /var/www>
   # Required if running Apache > 2.4
   Require all granted

   RewriteEngine on 
   RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
 </Directory>

supposément une exigence similaire existe également pour Apache 2.2, si vous utilisez cela:

<Directory /var/www>
   # Required if running Apache 2.2
   Order allow,deny
   Allow from all

   RewriteEngine on 
   RewriteRule ^cachebust-([a-z0-9]+)\/(.*) /$2 [L] 
 </Directory>

Notez qu'une directive ErrorDocument 404 peut parfois également remplacer ces éléments. Si cela ne fonctionne pas, essayez de commenter votre directive ErrorDocument et voyez si elle fonctionne. L'exemple ci-dessus peut être utilisé pour s'assurer qu'un site n'est pas desservi à partir de la mémoire cache en incluant un sous-dossier dans le chemin, même si les fichiers se trouvent à la racine du serveur.

1
Brad Parks

Sur centOS7, j'ai modifié le fichier /Etc/httpd/conf/httpd.conf

de AllowOverride None Autoriser tout surpasser

0
njoshsn