¿Es esta una forma correcta de habilitar htaccess en Apache 2.4.7?

¿Es esta una forma correcta de habilitar htaccess en Apache 2.4.7?

En casi todas las soluciones de "Cómo activar htaccess", dicen que es necesario editar el archivo /etc/apache2/sites-available/default. Pero no existe ese archivo en Apache 2.4.7

Leí en alguna parte que el nuevo archivo predeterminado es 000-default.conf. Así que lo edité e intenté agregar la línea:

AllowOverride All

Pero Apache2 no se reinició correctamente y dio un error. En la documentación de Apache2, descubrí que AllowOverride solo está permitido en la <Directory>sección. Luego intenté agregar esto:

<Directory "/var/www">
AllowOverride All
</Directory>

Y esto parece funcionar. Pero no estoy seguro de si debería haber puesto /var/www allí. ¿Es una forma correcta de hacerlo o mi computadora explotará de alguna manera?

Respuesta1

tl; dr

Sí, es la forma correcta.
Pero para ser mássemántico: Sí, es la forma correcta de permitir .htaccessanular todas las directivas en el /var/wwwdirectorio.


Como lo descubriste,AllowOverrideestá permitido sólo bajo la Directorysección.

Usando tu ejemplo:

<Directory "/var/www">
    AllowOverride All
</Directory>

Esto le dice a Apache que todas las configuraciones se pueden anular en /var/wwwy en todos sus subdirectorios (recursivamente).


Para un mejor ejemplo, considere que tiene la siguiente configuración en su host virtual:

<Directory "/var/www">
    AllowOverride All
</Directory>

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

Y la siguiente estructura de directorios:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

Lo que hice aquí fue crear un .htaccessen cada subdirectorio del /var/wwwdirectorio.
Normalmente no debería ser así, pero esto es sólo por el ejemplo.

Comparar la estructura del directorio con la configuración, significa que todos .htaccesslos archivos dentro de la /var/wwwcarpeta y sus subdirectorios, excluyendo el /var/www/uploadsdirectorio y sus subdirectorios, pueden anular todo tipo de directivas.

Pero /var/www/uploadsy sus subdirectorios solo pueden usar el .htaccessarchivo para anular las Allowdirectivas y Deny.Order

Nota: A partir de Apache 2.4 (que está disponible de forma predeterminada en 13.10+) Allow, las directivas Denyy Orderfueron reemplazadas por una única directiva denominada Require.

Respuesta2

Primero habilite la reescritura usando este comando:

sudo a2enmod rewrite

Luego reinicie apache2:

sudo service apache2 restart

Luego ve a la sites-availablecarpeta:

/etc/apache2/sites-available

Edite el archivo nombrado defaulty cámbielo AllowOverride nonea AllowOverride All. Hay dos líneas donde se debe realizar este cambio.

Esto hará que .htaccessfuncione en su servidor VPS.

Esto funcionó en un VPS Ubuntu 12.04.5.

Respuesta3

En mi caso funcionó así:
tuve que agregar las siguientes líneas:

Order allow, deny
Allow from all

Entonces se ve así:

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

Respuesta4

Un problema común que encontré en estos tutoriales es que no hay ningún archivo default.conf en

/etc/apache2/sites-available

Pude encontrar el lugar para cambiarlo, pero era el archivo apache2.conf aquí

/etc/apache2/apache2.conf

No estoy realmente seguro de si es una buena idea, pero funcionó para mí y en el entorno en el que me encuentro es seguro.

información relacionada