¿Tiene que reiniciar Apache para que las reglas de reescritura en .htaccess surtan efecto?

98

He enviado mis archivos .htaccess a los servidores de producción, pero no funcionan. ¿Sería un reinicio el siguiente paso o debería marcar otra cosa?

Jesse Hattabaugh
fuente

Respuestas:

93

No es necesario reiniciar para realizar cambios en .htaccess. Algo más está mal.

Asegúrese de que su .htaccess incluya la declaración

RewriteEngine encendido

que es necesario incluso si también está presente en httpd.conf. También verifique que .htaccess sea legible por el proceso httpd.
Verifique el error_log: le informará de cualquier error en .htaccess si se está utilizando. Poner un error de sintaxis intencional en .htaccess es una buena comprobación para asegurarse de que se esté utilizando el archivo; debería obtener un error 500 en cualquier página del mismo directorio.

Por último, puede habilitar un registro de reescritura usando comandos como los siguientes en su httpd.conf:

RewriteLog "registros / reescritura"

RewriteLog Nivel 7

El archivo de registro así generado le dará el sangriento detalle de qué reglas de reescritura coincidieron y cómo se manejaron.

TomG
fuente
3
Esto está un poco desactualizado. Me encontré con un problema similar y quería depurar mis reescrituras para un caso de uso particular. Probé este método, pero después de un poco de frustración y excavación, descubrí cuál era el problema. Esto es para versiones anteriores de apache. Para apache2.4> reemplazar el RewriteLog y Loglevel anterior con: LogLevel alert rewrite:trace7. Después de reiniciar Apache , debería ver los rastros en el error.log Espero que ayude. http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Casper Wilkes
52

No :

Apache permite la gestión descentralizada de la configuración a través de archivos especiales ubicados dentro del árbol web. Los archivos especiales se suelen llamar .htaccess, pero se puede especificar cualquier nombre en la directiva AccessFileName ... Dado que los archivos .htaccess se leen en cada solicitud, los cambios realizados en estos archivos tienen efecto inmediato ...

Milen A. Radev
fuente
Si ha agregado el nombre de usuario a 'Requerir usuario' en el archivo habilitado para sitios, descubrí empíricamente que necesita reiniciar. Uno elegante lo hace.
Ross
18

De la documentación de apache: más comúnmente, el problema es que AllowOverride no está configurado de manera que se cumplan sus directivas de configuración. Asegúrese de no tener un AllowOverride None en vigor para el alcance del archivo en cuestión. Una buena prueba para esto es poner basura en su archivo .htaccess y volver a cargar. Si no se genera un error del servidor, es casi seguro que tenga AllowOverride None en efecto.

Flautista de Hamelín
fuente
1
Eliminación del enlace a Apache - AllowOverride: httpd.apache.org/docs/2.2/mod/core.html#AllowOverride
scunliffe
2
Agrego esta línea "<directorio /> </directorio>" a mi .htaccess para generar un error en el registro. Dirá "<Directorio no permitido aquí" y sé que está leyendo mi archivo.
Mnebuerquo
3

Sólo si ha no añadido el módulo mod_rewrite de Apache.

Solo necesita reiniciar Apache si cambia algún archivo ".conf" de Apache.

etílico
fuente
2

Tengo el mismo problema y parece que la publicación de PiedPiper sobre AllowOverride fue de gran ayuda. Verifique su archivo httpd.conf para "AllowOverride" y asegúrese de que esté configurado en Todos.

Dave Ip
fuente
1
Publicación
Zach Saucier
2

En caso de .htaccess, no es necesario reiniciar si no está funcionando, las razones probables incluyen.

  • AllowOverride Es posible que no se establezca qué usuario puede establecer dentro de httpd.conf o puede que tenga que contactar al administrador del servidor.

  • Verifique el nombre del archivo .htaccess, debe ser .htaccess, no htaccess.txt, consulte aquí la guía sobre cómo crear uno.

  • Trate de uso Options -Indexeso deny alltipo de directiva sencilla para ver si está funcionando o no.

  • borre el caché del navegador cada vez que tenga una regla para redireccionamientos o similar, si el redireccionamiento anterior está almacenado en caché, parece que las cosas no funcionan.

Abhishek Gurjar
fuente
0

¿Qué hay en tu .htaccess? RewriteRules? Compruebe que mod_rewrite esté instalado y habilitado.

¿Otras cosas? Intente configurar AllowOverride en 'todos' en ese directorio.

ceejayoz
fuente