.htaccess se ignora aunque VirtualHost tiene "AllowOverride All"

25

Estoy ejecutando un servidor LAMP en Fedora 13 que funciona bien; sin embargo, acabo de agregar un archivo ".htaccess" a la carpeta docroot de mi sitio actual que se ignora por completo.

He probado media docena de pruebas diferentes, incluida esta:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Pero las imágenes y todas las demás páginas se cargan bien, y los archivos inexistentes siguen siendo 404. También probé esto:

order deny,allow
deny from all

Pero cada página todavía se carga bien. Nuevamente, el archivo .htaccess simplemente se ignora al 100%.

Ponemos nuestros registros de host virtual en /etc/httpd/conf.d/virtual.conf. Se parece a esto:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

¿Qué más podría estar causando que nuestro servidor IGNORE completamente el .htaccessarchivo?

Editar:

Cambié el archivo .htaccess a arriba para demostrar mejor que mis cambios están siendo ignorados. Tenga en cuenta que probé exactamente el mismo archivo .htaccess en el servidor de producción y funcionó bien.

Edición 2:

OK, tengo nueva información! Solo para fines de prueba, revisé y cambié temporalmente TODAS las directivas "AllowOverride" a AllowOverride All. Descubrí que la primera entrada del Directorio parece dominar a todas las demás:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Cuando cambié eso a AllowOverride All, mis archivos .htaccess comienzan a tener efecto. ¡Es como si AllowOverride Allse ignoraran todas las demás directivas en mis archivos de configuración!

¿¿Lo que da??

Brian Lacy
fuente

Respuestas:

32

Increíble. ¿Recuerdas cómo dije que este es un servidor de desarrollo? Sí ... bueno, así es como se ve REALMENTE mi entrada de host virtual:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

¿Lo ves? Pues no lo hice. OLVIDÉ Cambiar mi entrada de "Directorio" a dev.ourwebsite.com en lugar de ourwebsite.com, y eso marcó la diferencia. Supuse que Apache habría arrojado un error si el directorio no existiera; pero eso solo se aplica a la directiva DocumentRoot. está basado en coincidencias, lo que significa que aplica las reglas si coincide con la solicitud entrante, pero de lo contrario, no le importa si le dice a AllowOverride en unicornios mágicos.

Que esto sea una lección para cualquier otro que venga a buscar: cuando todo lo demás falla, considere el todopoderoso Typo.

Brian Lacy
fuente
¡Nunca en un millón de años habría captado esto! También tuve un error tipográfico en la ruta del Directorio, también un proyecto de desarrollo ... Gracias por abrir mis ojos.
gillytech
Yo también tuve un error tipográfico en la parte del directorio. Realmente, esto fue muy frustrante. Fue una bendición que me cruzara con esto y me di cuenta del hecho de que puedo cometer errores súper tontos.
Akash Kumar Sharma
Sé que han pasado 7 años, pero solo quería aparecer y decir que esta respuesta me ayudó. Era el mismo tipo de cosas. Copié directivas de un host virtual diferente y cambié el bit incorrecto. ¡Gracias por compartir esta información! Surfea sabiamente.
dolst
5

Compruebe si hay otro "AllowOverride None" presentado en 'httpd.conf' arriba de la declaración de virtualhosts. Probablemente, tenga "AllowOverride None" en docroot.

Denis
fuente
El servidor con el que estoy trabajando es un servidor de desarrollo, y es un duplicado exacto de nuestro servidor de producción. Los archivos httpd.conf son prácticamente idénticos. La ÚNICA diferencia significativa es que nuestro "virtual.conf" en este servidor tiene menos entradas y cada sitio tiene el prefijo dev.. Sin embargo, el servidor de producción funciona bien, los archivos .htaccess se comportan exactamente como se esperaba, y el servidor de desarrollo simplemente ignora el archivo .htaccess por completo.
Brian Lacy el
0

Tres conjeturas:

¿Existe en realidad un espacio después de la coma en la línea order deny, allowde .htaccess? A Apache no le gusta eso. Para mí en F13 obtuve 500.

¿Tienes una AccessFileNamedirectiva en alguna parte?

Si está utilizando selinux, ¿tiene el contexto correcto para el archivo ( ls -lZ)?

Mark Wagner
fuente
No obtengo 500 errores. El archivo .htaccess simplemente se ignora. Y verifiqué que no tenía un espacio allí de todos modos. No sé nada sobre selinux o contextos, pero busqué cómo verificar y aparentemente está deshabilitado. En cuanto a AccessFileName, miraré a mi alrededor, pero como dije en mi comentario sobre la respuesta de Denis, la configuración de apache para estos dos servidores es efectivamente idéntica.
Brian Lacy el
También he tenido problemas con el espacio. Me volvió loco.
egorgry
Whoops, corrección: SÍ tengo una directiva AccessFileName en mi httpd.conf. Se lee de la siguiente manera:AccessFileName .htaccess
Brian Lacy el
0

Tuve esto en un servidor nuevo, eventualmente me di cuenta de que mod-rewrite no estaba habilitado por defecto.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
jmullee
fuente