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

46

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

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

AllowOverride All

Pero Apache2 no se reinició correctamente y dio un error. De una 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?

Despistado
fuente
mira esto. Te puede ayudar. stackoverflow.com/questions/33062142/…
Avnish alok

Respuestas:

58

tl; dr

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


Como descubriste, AllowOverridesolo está permitido en la Directorysección.

Usando tu ejemplo:

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

Esto le dice a Apache que todas las configuraciones pueden ser anuladas 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í, es crear un .htaccessen cada subdirectorio del /var/wwwdirectorio.
Por lo general, no debería ser así, pero esto es solo por el bien del ejemplo

Al comparar la estructura de directorios con la configuración, significa que todos los .htaccessarchivos dentro de la /var/wwwcarpeta y sus subdirectorios, excluyendo el /var/www/uploadsdirectorio y sus subdirectorios, pueden anular todo tipo de directivas.

Sin embargo, /var/www/uploadsy sus subdirectorios sólo pueden utilizar el .htaccessarchivo para anular las Allow, Denyy Orderlas directivas.

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

Dan
fuente
39

Primero habilite reescribir 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 hacer este cambio.

Esto hará que el .htaccesstrabajo en su servidor VPS.

Esto funcionó en un Ubuntu 12.04.5 VPS.

q8fft
fuente
3
no hay un archivo llamado default - pero hay un archivo llamado 000-default.conf
Tahir Yasin
1
+1 para recordar habilitar la reescritura, me faltaba esto y no podía entender por qué no funciona después de hacer todas las cosas.
Abdul Mannan
Este comentario se refiere a la configuración de Apache 2.2, no 2.4. En 2.4, defaultse llama al archivo 000-default.confy no contiene la AllowOverride Nonelínea.
ben_nuttall
el archivo es 000-default.confy no es posible agregarlo AllowOverride Noneaquí, si vuelve a cargar apache, dar error
Kreker
Si todo lo que necesita es permitir que se anulen las directivas mod_rewrite .htaccess, es mejor usarlas AllowOverride FileInfo. Aunque FileInfo ya incluye un gran conjunto de directivas, aún estaría restringiendo la anulación de muchas directivas.
Dan
3

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>
Prof. Chagas
fuente
Aunque esto puede haber solucionado su problema, no está relacionado con la pregunta que tiene el OP. Las directivas order y allow son directivas en apache2.2 y anteriores. Se utilizan para permitir / denegar el acceso a los usuarios en ciertos directorios. No tienen ningún impacto sobre si las directivas en un archivo .htaccess se analizarán o no.
Dan
2

Aquí un fragmento de cómo habilitar htaccess en Apache 2.4 sin cambiar la configuración predeterminada:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
panticz.de
fuente