Cómo habilitar la reescritura de mod para Apache 2.2


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

No 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 funcionan en mi alojamiento, por lo que deberían estar bien, por lo que mi pregunta es, ¿hay alguna cosa oculta en la configuración de Apache que pueda bloquear la reescritura de mod?

Author: Jakub Arnold, 2009-05-15

16 answers

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

sudo a2enmod rewrite

Reiniciar apache2 después de

sudo /etc/init.d/apache2 restart

O

sudo service apache2 restart

O según la nueva Forma de Control del Sistema unificado

sudo systemctl restart apache2

Entonces, 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 anterior .htaccess (si se coloca en su DocumentRoot) redirigirá todo el tráfico a un archivo index.php en el DocumentRoot a menos que el archivo exista.

Entonces, digamos que tienes el siguiente directorio estructura 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 usando el .htaccess mostrado arriba, sin embargo, todo lo demás será redirigido a httpdocs/index.php. Sus archivos de aplicación en includes/app no serán accesibles.

 886
Author: Jonathan Mayhak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-13 07:49:05

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 inlcude

AllowOverride all

En la sección <Directory> para el sitio en cuestión.

 214
Author: Mike Wazowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-19 09:55:05

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

Intenta establecer: AllowOverride All.


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

 77
Author: Jarrod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-17 20:35:04

Si no hay ninguno de los trabajos anteriores, intente editar /etc / apache2 / sites-enabled / 000-default

Casi en la parte superior se encuentra

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

Cambiar el AllowOverride None a AllowOverride All

Esto funcionó para mí

 70
Author: Martin Sax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-13 16:32:45

En Ubuntu:

Ejecutar:

a2enmod rewrite

Y luego:

service apache2 restart

mod_rewrite ahora estará habilitado!

 41
Author: nickleefly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-13 12:01:34

Hay muchas maneras 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 mod_rewrite.módulo c instalado o habilitado.

Por esta razón, tendría que 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 conf de Apache (ya sea apache2.conf, http.conf, o 000-archivo predeterminado).

  2. Localizar " Directorio / var / www/"

  3. Cambie el "Override None "a"Override All"

Problema 3

Si obtiene un error que indica que el módulo de reescritura no se encuentra, probablemente su módulo userdir no está habilitado. Para esto razón por la que necesitas 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

 27
Author: Kripa Jayakumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-09 18:33:38

Abra 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 sites-available.)

Sustitúyase a continuación por las actuales líneas 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 restart o service apache2 restart

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

 24
Author: Umesh Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-04 11:59:46

La nueva versión de Apache ha cambiado de alguna manera. Si tu versión de apache es 2.4 entonces tienes que ir a /etc/apache2/. Habrá un archivo llamado apache2.conf. Tienes que editar esa (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.

 16
Author: Ijas Ahamed N,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-18 06:09:14

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 httpd.conf archivo! :)

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 instalaste para "C:\Program Archivos" aquí)

Echa un vistazo en la carpeta: "C:\Program Archivos\Apache Software Foundation\Apache2.2 \ modules " y asegúrese de que hay un archivo llamado mod_rewrite.so ahí dentro. (Debería ser, se proporciona como parte de la instalación predeterminada.

A continuación, abre "C:\Program Files\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 el RewriteEngine de forma predeterminada, es posible que desee agregar algo como

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

Al final de su httpd.conf file.

Si no, asegúrese de especificar

RewriteEngine On

En algún lugar de su .archivo htaccess.

 13
Author: gabehabe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-16 22:31:14

Acabo de hacer esto

sudo a2enmod rewrite

Luego debe reiniciar el servicio apache siguiendo el comando

sudo service apache2 restart
 4
Author: user3470929,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-04 11:58:21

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

ErrorDocument 404 /index.php?page=404
 3
Author: Michael Cramer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-15 15:52:58

La primera vez que tuve problemas con las reglas mod_rewrite ignorando mi tráfico, aprendí (frustrantemente) que las había colocado en el <VirtualHost> incorrecto, lo que significaba que mi tráfico ignoraría todos de ellos sin importar lo bien escritos que estuvieran. Asegúrate de que esto no te esté pasando a ti:

# 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 supervisar de cerca el comportamiento mod_rewrite. Una vez que se solucione su problema, gire el RewriteLogLevel vuelve y celebra.

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

 2
Author: Garrett Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-29 09:29:27

Recomiendo encarecidamente a todos los que quieran habilitar las directivas mod_rewrite en .archivos htacces para usar AllowOverride FileInfo en lugar de permitir todo, como sugieren TODAS las respuestas en esta página. Es triste ver que todas estas respuestas toman el enfoque de "mientras funcione" en lugar de tratar de entender las consecuencias de la "solución" propuesta. Trate de entender lo que está haciendo en su servidor y cómo limitar los privilegios que acaba de regalar con AllowOverride All. RTFM!, es bastante claro en tema. Vamos chicos, no es rocketscience, es sólo un servidor web!

 2
Author: RemyNL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-19 14:10:23

Hilo viejo, solo quiero poner que no establecer AllowOverride a todos en lugar de utilizar mod específico que desea utilizar,

AllowOverride mod_rewrite mod_mime

Y esta línea debe ser sin comentarios

LoadModule rewrite_module modules/mod_rewrite.so

Refrences

 2
Author: Abhishek Gurjar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-27 09:03:48

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

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

También, como ya se mencionó, asegúrese de que AllowOverride all esté establecido en la sección pertinente de /etc/apache2/sites-available/default

 1
Author: Benubird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-07 10:00:50

Use el comando debajo

sudo a2enmod rewrite

Y el comando reiniciar apache a través de abajo

sudo service apache2 restart
 0
Author: prasoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-12 13:37:24