Luego de migrar un sitio MediaWiki a un nuevo servidor, me encontré con el siguiente error al tratar de cargar las imágenes incrustadas en las páginas:
[Wed Dec 07 20:05:40 2016] [alert] [client 192.168.85.159] /var/www/wiki/images/.htaccess: RewriteEngine not allowed here, referer: http://wiki.linuxito.com/index.php/Manuales
El archivo .htaccess
en cuestión, tiene el siguiente contenido:
# Protect against bug 28235 <IfModule rewrite_module> RewriteEngine On RewriteCond %{QUERY_STRING} \.[^\\/:*?\x22<>|%]+(#|\?|$) [nocase] RewriteRule . - [forbidden] </IfModule>
Esto es una simple regla de reescritura con mod_rewrite
.
El error "RewriteEngine not allowed here" ocurre porque, en la configuración del directorio dentro del VirtualHost
de Apache para el sitio, se indica que se deben ignorar completamente los archivos .htaccess
:
# nano /etc/apache2/sites-available/wiki
<IfModule rewrite_module> RewriteEngine On <Directory /var/www/wiki> Options FollowSymLinks MultiViews AllowOverride none
La directiva AllowOverride none
ignora los archivos .htaccess
dentro del directorio de imágenes de la Wiki.
Para que se interpreten los archivos .htaccess
, y la regla de reescritura funcione, es posible cambiar la configuración de none
a FileInfo
:
AllowOverride FileInfo
De acuerdo al manual de Apache, FileInfo
permite que se interpreten (dentro de archivos .htaccess
) las directivas de control de tipos de archivo, metadatos, reglas de reescritura, aliases y actions.
FileInfo
es una directiva bastante abierta, pero al menos no es tan abierta como configurar all
para permitir cualquier tipo de regla en archivos .htaccess
.
Finalmente es necesario recargar la configuración de Apache para que tome los cambios:
# service apache2 reload
Referencias
Apache Core Features - AllowOverride Directive