Cómo habilitar mod_rewrite para Apache 2.2

Tengo una nueva instalación de Apache 2.2 en mi máquina Vista, todo funciona bien, excepto la modificación de mods.

He comentado

LoadModule rewrite_module modules/mod_rewrite.s 

pero ninguna de mis reglas de reescritura funciona, incluso las simples como

 RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404 

Todas las reglas que estoy usando están trabajando en mi hosting, por lo que deberían estar bien, entonces mi pregunta es, ¿hay algo oculto en la configuración de Apache que pueda bloquear la modificación de mods?

Para usar mod_rewrite puedes escribir el siguiente comando en la terminal:

 sudo a2enmod rewrite 

Reinicie apache2 después

 sudo /etc/init.d/apache2 restart 

o

 sudo service apache2 restart 

o según el nuevo sistema unificado Control Way

 sudo systemctl restart apache2 

Luego, si lo desea, puede usar el siguiente archivo .htaccess .

  RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  

El archivo .htaccess anterior (si se coloca en su DocumentRoot ) redirigirá todo el tráfico a un archivo index.php en el DocumentRoot menos que el archivo exista.

Entonces, digamos que tiene la siguiente estructura de directorio y httpdocs es el DocumentRoot

 httpdocs/ .htaccess index.php images/ hello.png js/ jquery.js css/ style.css includes/ app/ app.php 

Cualquier archivo que exista en httpdocs será servido al solicitante utilizando el .htaccess muestra arriba, sin embargo, todo lo demás será redirigido a httpdocs/index.php . No se podrá acceder a los archivos de la aplicación en includes/app .

Para mi situación, tuve

 RewriteEngine On 

en mi .htaccess , junto con el módulo que se está cargando, y no funcionaba.

La solución a mi problema fue editar mi entrada de vhost para incluir

 AllowOverride all 

en la sección para el sitio en cuestión.

He escrito sobre esto en un artículo: http://www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu

Intente configurar: AllowOverride All .


El segundo problema más común es no tener habilitada la reescritura mod: a2enmod rewrite y luego reiniciar apache.

Si no funciona, intente editar / etc / apache2 / sites-enabled / 000-default

casi en la parte superior encontrarás

  Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all  

Cambie AllowOverride None a AllowOverride All

esto funcionó para mí

En Ubuntu:

Correr:

 a2enmod rewrite 

y entonces:

 service apache2 restart 

mod_rewrite ahora estará habilitado!

Hay muchas formas de solucionar este problema, si conoce la raíz del problema.

Problema 1

En primer lugar, puede ser un problema con su apache que no tiene el módulo mod_rewrite.c instalado o habilitado.

Por esta razón, debe habilitarlo de la siguiente manera

  1. Abre tu consola y escribe en ella, esto:

    sudo a2enmod rewrite

  2. Reinicia tu servidor apache.

    service apache2 restart

Problema 2

  1. También puede, además de lo anterior, si no funciona, tiene que cambiar la regla de anulación del archivo apache conf (apache2.conf, http.conf o 000-default file).

  2. Ubique “Directorio / var / www /”

  3. Cambie “Anular Ninguno” a “Anular todo”

Problema 3

Si obtiene un error que indica que no se encuentra el módulo de reescritura, entonces probablemente su módulo de usuario no esté habilitado. Por este motivo, debe habilitarlo.

  1. Escriba esto en la consola:

    sudo a2enmod userdir

  2. Luego intente habilitar el módulo de reescritura si todavía no está habilitado (como se mencionó anteriormente).

Para leer más sobre esto, puede visitar este sitio: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html

Abrir terminal y typin a2enmod rewrite , habilitará su módulo mod_rewrite para Apache.

Luego vaya a /etc/apache2/sites-available y edite el archivo predeterminado. (Para esto debe tener permisos de escritura para este archivo y la carpeta de sitios disponibles).

Reemplace a continuación con las líneas existentes 4 a 14

 DocumentRoot /var/www  Options FollowSymLinks AllowOverride All   Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all  

Ahora reinicia tu apache mediante /etc/init.d/apache2 restart o /etc/init.d/apache2 restart service apache2 restart

Realice nuevamente una prueba URL limpia y esta vez se aprobará.

Nueva versión de apache ha cambiado de alguna manera. Si su versión de apache es 2.4, entonces tiene que ir a /etc/apache2/ . Habrá un archivo llamado apache2.conf . Tienes que editar ese (deberías tener permiso de root). Cambiar el texto del directorio como este

  Options Indexes FollowSymLinks AllowOverride All Require all granted  

Ahora reinicia Apache.

 service apache2 reload 

Espero que funcione.

Acabo de notar que dijiste mod_rewrite.s en lugar de mod_rewrite.so – ¡espero que sea un error en tu pregunta y no en el archivo httpd.conf! 🙂

Estoy más acostumbrado a usar Apache en Linux, pero tuve que hacer esto el otro día.

En primer lugar, eche un vistazo a su directorio de instalación de Apache. (Asumiré que lo instaló en “C: \ Archivos de progtwig” aquí)

Eche un vistazo a la carpeta: “C: \ Archivos de progtwig \ Apache Software Foundation \ Apache2.2 \ modules” y asegúrese de que hay un archivo llamado mod_rewrite.so allí. (Debería ser, se proporciona como parte de la instalación predeterminada).

A continuación, abra “C: \ Archivos de progtwig \ Apache Software Foundation \ Apache2.2 \ conf” y abra httpd.conf. Asegúrate de que la línea:

 #LoadModule rewrite_module modules/mod_rewrite.so 

no está comentado

 LoadModule rewrite_module modules/mod_rewrite.so 

Además, si desea habilitar RewriteEngine de manera predeterminada, es posible que desee agregar algo como

  RewriteEngine On  

hasta el final de su archivo httpd.conf.

Si no, asegúrese de especificar

 RewriteEngine On 

en algún lugar de su archivo .htaccess.

Acabo de hacer esto

 sudo a2enmod rewrite 

entonces tienes que reiniciar el servicio Apache siguiendo el comando

 sudo service apache2 restart 

Obviamente hay más de una forma de hacerlo, pero sugeriría usar el estándar más:

 ErrorDocument 404 /index.php?page=404 

La primera vez que luché con las reglas de mod_rewrite ignorando mi tráfico, supe (frustrantemente) que las había colocado en el incorrecto, lo que significaba que mi tráfico las ignoraría a todas , sin importar lo bien escritas que estuvieran. Asegúrese de que esto no le suceda a usted:

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

Estos parámetros se activarán si realiza un reinicio elegante de Apache, para que pueda reciclarlos y seguir de cerca el comportamiento de mod_rewrite. Una vez que se resuelva su problema, vuelva a escribir RewriteLogLevel y celebre.

En el 100% de mi experiencia, he descubierto que RewriteLog me ha ayudado a descubrir el problema con mis reglas de reescritura. No puedo recomendar esto lo suficiente. ¡Buena suerte en tu resolución de problemas!

Además, este marcador es tu mejor amigo: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog

Recomiendo encarecidamente a todos los que quieran habilitar las directivas mod_rewrite en archivos .htacces que utilicen AllowOverride FileInfo lugar de permitir todo, ya que TODAS las respuestas de esta página sugieren. Es triste ver que todas estas respuestas adoptan el enfoque de “siempre-está-funciona-está-bien-en vez de tratar de entender las consecuencias de la ‘solución’ propuesta. Intente comprender lo que está haciendo en su servidor y cómo limitar los privilegios que acaba de obsequiar con AllowOverride All . RTFM! , es bastante claro sobre el tema. Vamos, chicos, no es rocketscience, es solo un servidor web!

Tema viejo, solo quiero decir que no establezcas AllowOverride para todos en lugar de usar el mod específico que quieras usar,

 AllowOverride mod_rewrite mod_mime 

Y esta línea no debe ser comentada

 LoadModule rewrite_module modules/mod_rewrite.so 

Refrences

Lo que funcionó para mí (en ubuntu):

 sudo su cd /etc/apache2/mods-enabled ln ../mods-available/rewrite.load rewrite.load 

Además, como ya se mencionó, asegúrese de que AllowOverride all esté configurado en la sección relevante de /etc/apache2/sites-available/default