rewriterule mod_rewrite ifmodule htaccess ejemplos a2enmod apache mod-rewrite

apache - ifmodule - mod_rewrite htaccess



Cómo habilitar mod_rewrite para Apache 2.2 (16)

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

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, entonces mi pregunta es, ¿hay algo oculto en la configuración de apache que pueda bloquear la reescritura de mod?


Abra el terminal y escriba 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 <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 con /etc/init.d/apache2 restart o service apache2 restart

Haz la prueba de URL limpia de nuevo y esta vez se pasará.


Acabo de hacer esto

sudo a2enmod rewrite

entonces tienes que reiniciar el servicio de apache siguiendo el comando

sudo service apache2 restart


En Ubuntu:

Correr:

a2enmod rewrite

y entonces:

service apache2 restart

mod_rewrite ahora estará habilitado!


Hay muchas maneras en que puede solucionar este problema, si conoce la raíz del problema.

Problema 1

En primer lugar, puede ser un problema si su apache no tiene 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 que, además de lo anterior, si no funciona, tenga que cambiar la regla de anulación del archivo apache conf (ya sea apache2.conf, http.conf o el archivo 000-default).

  2. Localice "Directorio / var / www /"

  3. Cambie "Anular ninguno" a "Anular todo"

Problema 3

Si recibe un error que indica que no se encontró el módulo de reescritura, probablemente su módulo de dirección de usuario no esté habilitado. Por esta razón necesitas habilitarlo.

  1. Escribe 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




La 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 eso (deberías 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.


La primera vez que luché con las reglas mod_rewrite que ignoraban mi tráfico, aprendí (frustrantemente) que las había colocado en el <VirtualHost> equivocado, lo que significaba que mi tráfico las ignoraría a todas , sin importar lo bien escritas que estuvieran. 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 elegante de Apache, de modo que pueda reciclarlos y monitorear de cerca el comportamiento de mod_rewrite. Una vez que su problema se haya solucionado, gire el RewriteLogLevel hacia abajo y celebre.

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

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


Lo que me funcionó (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 correspondiente de /etc/apache2/sites-available/default


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

ErrorDocument 404 /index.php?page=404


Para mi situación, tuve

RewriteEngine On

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

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

AllowOverride all

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


Para utilizar mod_rewrite puede escribir el siguiente comando en el terminal:

sudo a2enmod rewrite

Reinicie apache2 despues

sudo /etc/init.d/apache2 restart

o

sudo service apache2 restart

o según el nuevo Sistema Unificado de Control de Camino

sudo systemctl restart apache2

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

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

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 exista el archivo.

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 se entregará al solicitante utilizando el .htaccess muestra arriba, sin embargo, todo lo demás se redirigirá a httpdocs/index.php . Los archivos de su aplicación en includes/app no serán accesibles.


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>

Cambie el AllowOverride None a AllowOverride All

esto me funcionó


Use el comando de abajo

sudo a2enmod rewrite

Y el reinicio de apache por debajo del comando.

sudo service apache2 restart


AllowOverride FileInfo encarecidamente a todos los que quieran habilitar las directivas mod_rewrite en los archivos .htacces para que utilicen la AllowOverride FileInfo archivo AllowOverride FileInfo lugar de permitir todo, como lo sugieren TODAS las respuestas en esta página. Es triste ver que todas estas respuestas adopten el enfoque de "siempre que funcione" está bien, en lugar 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 AllowOverride All con AllowOverride All . RTFM! , queda bastante claro sobre el tema. Vamos tíos, no es una ciencia espacial, ¡es solo un servidor web!


<editar>

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

</edit>

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

En primer lugar, eche un vistazo en su directorio de instalación de Apache. (Supondré que lo hayas instalado en "C: / Archivos de programa" aquí)

Eche un vistazo en 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

esta sin comentar

LoadModule rewrite_module modules/mod_rewrite.so

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

<IfModule mod_rewrite> RewriteEngine On </IfModule>

hasta el final de su archivo httpd.conf.

Si no, asegúrate de especificar

RewriteEngine On

En algún lugar de su archivo .htaccess.