Cómo habilitar mod_rewrite para Apache 2.2


474

Tengo una nueva instalación de Apache 2.2 en mi máquina Vista, todo funciona bien, excepto la reescritura 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 funcionando en mi hosting, por lo que deberían estar bien, así que mi pregunta es, ¿hay algo oculto en la configuración de apache que pueda bloquear la reescritura de mods?


1
en realidad el problema era que tenía una ruta incorrecta, porque $ {DOCUMENT_ROOT} me indicó el directorio raíz que estaba bien en el alojamiento, pero incorrecto en el local, por lo que el problema no era solo RewriteEngine On, que ya tenía ...
Jakub Arnold

¿Puedes cambiar la respuesta aceptada a esta ? El autor de la respuesta aceptada actual ha admitido que no es lo suficientemente bueno.
Shadow Wizard es Ear For You el

1
Cómo habilitar mod_rewrite en Ubuntu 12.04 LTS (también debería funcionar en Debian) . Esto muestra la instalación Y la activación, los tutoriales a continuación sorprendentemente no lo hacen :(
Sliq

3
Recomiendo encarecidamente a todos los que quieran habilitar las directivas mod_rewrite en archivos .htacces para usar en AllowOverride FileInfolugar de permitir todo, como lo sugieren TODAS las respuestas en esta página. Es triste ver que todas estas respuestas adoptan el enfoque de "siempre y cuando funcione" en lugar de tratar de comprender 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 otorgar AllowOverride All. RTFM! , es bastante claro sobre el tema.
RemyNL

1
@Black Está en el archivo de configuración de Apache llamado httpd.conf. En mi PC, está en el directorio C: \ xampp \ apache \ conf, porque instalé Apache con XAMPP.
Lex Soft

Respuestas:


1005

Para usarlo mod_rewrite, puede escribir el siguiente comando en el terminal:

sudo a2enmod rewrite

Reiniciar apache2 después

sudo /etc/init.d/apache2 restart

o

sudo service apache2 restart

o según la nueva forma unificada de control del sistema

sudo systemctl restart apache2

Luego, si lo desea, puede usar el siguiente .htaccessarchivo.

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

El .htaccessarchivo anterior (si se coloca en su DocumentRoot) redirigirá todo el tráfico a un index.phparchivo en, a DocumentRootmenos que el archivo exista.

Entonces, digamos que tiene la siguiente estructura de directorios 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á entregado al solicitante utilizando lo que se .htaccessmuestra arriba, sin embargo, todo lo demás será redirigido a httpdocs/index.php. Los archivos de su aplicación includes/appno serán accesibles.


15
Las ideas aquí son correctas para una CLI de UNIX, pero los comandos solo funcionan para distribuciones de Linux basadas en Debian y no para un entorno de Windows del OP.
Jason Rikard

17
a2enmod rewrite hizo el trabajo
Dr. Casper Black

98
Nota adicional: también debe asegurarse de que la configuración de su sitio tenga AllowOverride Allpara que el .htaccessarchivo pueda leerse.
Adam Rosenfield

2
@Dennis puedes usar la reescritura de a2dismod
Jonathan Mayhak

3
¿Cómo puedo usar a2enmod rewriteen Windows?
Naman

229

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 vhost para incluir

AllowOverride all

en la <Directory>sección del sitio en cuestión.


10
De hecho, incluso con a2enmod rewrite& RewriteEngine Onen el .htaccess- la existencia de AllowOverride allen el archivo VirtualHost evitará que funcione - esto es lo que me sorprendió, cambiando a AllowOverride allfuncionar como un encanto :)
HeavenCore

99
principiante aquí ... ¿dónde está el archivo VirtualHost?
davneet

3
ESTE es el camino a seguir ... Tenía todo lo demás configurado, excepto esto.
arrayown

2
La AllowOverridedirectiva determina los "Tipos de directivas que están permitidas en los .htaccessarchivos". Además, "cuando esta directiva se establece en None, los .htaccessarchivos se ignoran por completo. En este caso, el servidor ni siquiera intentará leer los .htaccessarchivos en el sistema de archivos". Documentos oficiales: httpd.apache.org/docs/2.2/mod/core.html#allowoverride
John Erck

Esto me lo solucionó: tuve un problema con los enlaces permanentes de WordPress que no funcionaban correctamente. Si lo hace a2enmod rewritey luego en el archivo VirtualHosts cambie 'AllowOverride None' a 'AllowOverride All', debería funcionar. El archivo VirtualHosts se aplica si está ejecutando múltiples nombres de dominio en el mismo servidor (y dirección IP). Lo habría configurado para configurar el dominio.
Jason Preston

83

Pruebe a establecer: AllowOverride All.


El segundo problema más común es no tener habilitada la reescritura de mods a2enmod rewritey luego reiniciar apache.


¡Esta debería ser la respuesta n. ° 1 ya que resuelve un problema que está sucediendo en una instalación predeterminada de ubuntu!
Sliq

1
Esto permitirá que .htaccess anule cualquier otra configuración de apache. Esto no es recomendable.
Bhargav Nanekalva

Sí :) este también fue mi problema, pero aquí está el lugar que está explicando para los novatos como yo que este "AllowOverride All" está en /etc/apache2/sites-available/[sitenamefont>.conf y [sitename-ssl] .conf. Tuve que hacer una segunda investigación gracias a ti: D, ¡gracias por cierto!
MetaTron

77

Si ninguno de los trabajos anteriores intenta editar / etc / apache2 / sites-enabled / 000-default

casi en la parte superior encontrarás

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

Cambiar el AllowOverride NoneaAllowOverride All

esto funcionó para mí


Error cambiado de /laravel/public/authors was not found on this servera/index.php was not found on this server
Gangaraju

no puedo encontrar <Directorio>, solo <VirtualHost *: 80>
Nicolas S.Xu

1
@ NicolasS.Xu coloque esto en la etiqueta <VirtualHost *: 80>
wimdetr

Hice lo mismo, pero agregué una nueva sección <Directory /var/www/html>para aplicar la regla desde esta carpeta y solo hacia arriba.
Louis Loudog Trottier

44

En Ubuntu:

Correr:

a2enmod rewrite

y entonces:

service apache2 restart

mod_rewrite ahora estará habilitado!


28

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 no tener el módulo mod_rewrite.c instalado o habilitado.

Por este motivo, deberías habilitarlo de la siguiente manera

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

    sudo a2enmod rewrite

  2. Reinicie su servidor apache.

    service apache2 restart

Problema 2

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

  2. Busque "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 userdir 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 aún 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


2
Gran desglose del problema.
Banago

No lo use, AllowOverride Allya que habilitará muchas características peligrosas (como el uso de scripts perl). En su lugar, useAllowOveride Options
Marki555

28

La nueva versión de apache ha cambiado de alguna manera. Si su versión de apache es 2.4, entonces debe ir a /etc/apache2/. Habrá un archivo llamado apache2.conf. Debe editarlo (debe tener permiso de root). Cambiar el texto del directorio como este

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Ahora reinicie apache.

service apache2 reload

Espero que funcione.


Esta es la respuesta actualizada.
Paul

1
Si estás en 2019 y más allá, por favor vota esta respuesta :)
Luiz Cavalcanti

27

Terminal abierto y Typin a2enmod rewrite, habilitará su mod_rewritemódulo para Apache.

Luego vaya /etc/apache2/sites-availabley 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
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

Ahora reinicie su apache por /etc/init.d/apache2 restartoservice apache2 restart

Vuelva a realizar una prueba de URL limpia y esta vez se pasará.


15

<editar>

Acabo de notar que dijiste mod_rewrite.s en lugar de mod_rewrite.so, ¡espero que sea un error tipográfico en tu pregunta y no en el archivo httpd.conf! :)

</edit>

Estoy más acostumbrado a usar Apache en Linux, pero tuve que hacerlo 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 programa" aquí)

Eche un vistazo a la carpeta: "C: \ Archivos de programa \ Apache Software Foundation \ Apache2.2 \ modules" y asegúrese de que haya 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 programa \ Apache Software Foundation \ Apache2.2 \ conf" y abra httpd.conf. Asegúrese 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 forma predeterminada, es posible que desee agregar algo como

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

al final de su archivo httpd.conf.

Si no, asegúrese de especificar

RewriteEngine On

en algún lugar de tu archivo .htaccess.


@gabehabe tu avatar solo parecía que tenía un ícono en mi documento, jajaja
Jonathan dos Santos

5

Acabo de hacer esto

sudo a2enmod rewrite

entonces tienes que reiniciar el servicio apache siguiendo el comando

sudo service apache2 restart


4

Utilice el siguiente comando

sudo a2enmod rewrite

Y el reinicio apache a través del siguiente comando

sudo service apache2 restart

3

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

ErrorDocument 404 /index.php?page=404

3

La primera vez que tuve problemas con mod_rewrite normas haciendo caso omiso de mi tráfico, he aprendido (y frustrante) que los había colocado en el mal <VirtualHost>, lo que significaba que mi tráfico sería ignorar todo de ellos sin importar lo bien escritos que eran. Asegúrate de que esto no te esté sucediendo:

# 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 correcto de Apache, por lo que puede reciclarlos y monitorear de cerca el comportamiento de mod_rewrite. Una vez que se solucione el problema, vuelva a bajar el RewriteLogLevel y celebre.

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

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


2

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 AllowOverride allestablecerlo en la sección correspondiente de/etc/apache2/sites-available/default

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.