work - apache mod_rewrite no funciona o no está habilitado
rewriterule flags (5)
He instalado rewrite_module y modificado php.ini
en Apache.
Creo archivos rewrite.php
y .htaccess
, pero no está funcionando.
Mis carpetas del sistema de archivos como:
/var/www/html
/var/www/html/test
/var/www/html/test/.htaccess
/var/www/html/test/rewrite.php
El contenido de /var/www/html/.htaccess es:
$ 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><< <a href="http://www.webune.com/forums/viewtopic-p-62.html">Go back to webune forums.</a></p>
</body>
</html>
mod_rewrite.so está instalado.
$ ls -l mod_rewrite.so
-rwxr-xr-x 1 root root 59256 Sep 20 23:34 mod_rewrite.so
rewrite_module está cargado.
$ cat /etc/httpd/conf/httpd.conf | grep mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so
Configuración de AllowOverride
$ cat /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
En centOS7 cambié el archivo /etc/httpd/conf/httpd.conf
de AllowOverride Ninguno a AllowOverride All
Esta funcionando.
mi solución es:
1.crear un test.conf en /etc/httpd/conf.d/test.conf
2. escribí alguna regla, como:
<Directory "/var/www/html/test">
RewriteEngine On
RewriteRule ^link([^/]*).html$ rewrite.php?link=$1 [L]
</Directory>
3. reinicie su servidor Apache.
4. Intente nuevamente usted mismo.
Intente configurar: "Permitir omitir todo".
Para que mod_rewrite me funcione en Apache 2.4, tuve que agregar la línea "Requerir todo otorgado" a continuación.
<Directory /var/www>
# Required if running apache > 2.4
Require all granted
RewriteEngine on
RewriteRule ^cachebust-([a-z0-9]+)//(.*) /$2 [L]
</Directory>
supuestamente existe un requisito similar para Apache 2.2 también, si está usando eso:
<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>
Tenga en cuenta que una directiva ErrorDocument 404
puede anular estas cosas, por lo que si no funciona intente comentar su directiva ErrorDocument y vea si funciona. El ejemplo anterior se puede usar para garantizar que un sitio no se sirva desde la memoria caché al incluir una subcarpeta en la ruta, aunque los archivos residen en la raíz del servidor.
Por favor, inténtalo
sudo a2enmod rewrite
o use el comando de reinicio apache correcto
sudo /etc/init.d/apache2 restart