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.
/var/www/html
/var/www/html/test
/var/www/html/test/.htaccess
/var/www/html/test/rewrite.php
$ cat /var/www/html/test/.htaccess
RewriteEngine On
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]
$ 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><< <a href="http://www.webune.com/forums/viewtopic-p-62.html">Go back to webune forums.</a></p>
</body>
</html>
$ ls -l mod_rewrite.so
-rwxr-xr-x 1 root root 59256 Sep 20 23:34 mod_rewrite.so
$ cat /etc/httpd/conf/httpd.conf | grep mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so
$ cat /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Essayez de régler: "AllowOverride All".
S'il vous plaît essayez
Sudo a2enmod rewrite
ou utilisez la commande de redémarrage Apache correcte
Sudo /etc/init.d/Apache2 restart
Ç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.
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.
Sur centOS7, j'ai modifié le fichier /Etc/httpd/conf/httpd.conf
de AllowOverride None Autoriser tout surpasser