.htaccess no funciona apache

135

Tengo un servidor del servicio AWS EC2 que se ejecuta en Linux ubuntu y he instalado apache, php y mysql.

He agregado un .htaccessarchivo en la raíz de mi documento /var/www/html.

Ingresé este código en él: ErrorDocument 404 /var/www/html/404.phpy todavía no aparece.

Seguí ingresando este comando varias veces: sudo service httpd restartpara reiniciar el servidor pero no se muestran cambios ...

¿Cómo puedo solucionar esto? ¿Hice algo mal?

¡Gracias por adelantado!

Shalin Shah
fuente
2
¿Está seguro de que desea asignar el 400 Bad Requesterror /var/www/html/404.php?
Jon Lin

Respuestas:

288

Primero, tenga en cuenta que reiniciar httpd no es necesario para los archivos .htaccess. Los archivos .htaccess son específicamente para personas que no tienen root, es decir, no tienen acceso al archivo de configuración del servidor httpd y no pueden reiniciar el servidor. Como puede reiniciar el servidor, no necesita archivos .htaccess y puede usar la configuración del servidor principal directamente.

En segundo lugar, si se ignoran los archivos .htaccess, debe verificar que AllowOverride esté configurado correctamente. Ver http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride para más detalles. También debe asegurarse de que esté configurado en el ámbito correcto, es decir, en el bloque correcto de su configuración. Asegúrate de NO editar el que está en el bloque, por ejemplo.

En tercer lugar, si desea asegurarse de que se está leyendo un archivo .htaccess, coloque basura en él. Una línea no válida, como "LÍNEA NO VÁLIDA AQUÍ", en su archivo .htaccess, dará como resultado un error de servidor 500 cuando apunte su navegador al directorio que contiene ese archivo. Si no es así, entonces no tiene AllowOverride configurado correctamente.

Rich Bowen
fuente
141
+1 para poner basura en el archivo .htaccess como herramienta de diagnóstico.
retrohacker
46
La basura en la programación es más útil de lo que parece.
EnKrypt
1
Puse "A STRING" mi .htaccess, así que recibí un error, así que puse AllowOverride Alltodo apache2.confen mi Debian y funciona
Alex
1
Tenga en cuenta que AllowOverridesolo funciona en <Directory>directivas y se ignorará si se coloca dentro de una <Location ...>sección, consulte: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
Daniel Sokolowski
2
También tenga en cuenta que la <Directory>directiva espera una ruta absoluta en lugar de relativa. En mi caso, <Directory /> falló mientras <Directory /var/www/html/subdir>trabajaba.
Lukas Knuth el
115
  1. Habilitar el módulo Apache mod_rewrite

    a2enmod rewrite

  2. agregue el siguiente código a /etc/apache2/sites-available/default

    AllowOverride All

  3. Reiniciar apache

    /etc/init.d/apache2 restart

Sijo Thomas Maprayil
fuente
77
tenga en cuenta que en Apache 2.4 los archivos de configuración en / etc / apache2 / sites-available deben terminar en .conf ahora. Y tuve un poco de confusión en mi servidor con un default.conf en / etc / apache2 / sites-available y uno en / etc / apache2 /
rubo77
2
Gracias, en mi caso, la reescritura no estaba habilitada por defecto en apache2
Cross
ya sigo estos pasos pero no funciona en apache 2.4 lo que estoy haciendo mal = [
Luciano Andress Martini
Parece que requieren anulaciones de ip requieren autenticación, este comportamiento es inesperado (permitir desde cierta ip en apache 2.2 no haga esto) y en mi opinión puede ser muy peligroso, porque las excepciones de ip están anulando la autenticación, en apache 2.2 son cosas completamente diferentes !
Luciano Andress Martini
Omití el primer paso, pero cambié AllowOverride a All en mi apache.conf (Debian 8, /etc/apache2/apache.conf), reinicié y los archivos no están accesibles, bien. Pero el error no es como permiso denegado sino 500 Error interno del servidor, ¿por qué es eso? ¿Puedo arreglarlo?
dasLort
44

Si ha intentado todo lo anterior, que son todas respuestas válidas y buenas, y su archivo htaccess no funciona o está siendo leído, cambie la directiva en el apache2.confarchivo. Bajo Ubuntu la ruta es/etc/apache2/apache2.conf

Cambie la <Directory>directiva que apunta a sus páginas web públicas, donde reside el archivo htaccess. Cambiar de AllowOverride NoneaAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Tuve el mismo problema y encontré la respuesta y la explicación en Ubuntu Ask! foro /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working

usuario1946891
fuente
2
O bien, se puede agregar en el VHost
ssi-anik
En realidad, solo AllowOverride FileInfose requiere en la tercera línea para que el .htaccessarchivo sea leído y utilizado. Alltambién permite anulaciones de configuración adicionales, como .httpasswd(que se puede habilitar individualmente mediante el uso en Authconfiglugar de All).
Rafal
20

Para Ubuntu,
primero, ejecute este comando: -

sudo a2enmod rewrite

Luego, edite el archivo /etc/apache2/sites-available/000-default.confusando nano o vim usando este comando: -

sudo nano /etc/apache2/sites-available/000-default.conf

Luego, en el 000-default.confarchivo, agregue esto después de la línea DocumentRoot /var/www/html. Si su directorio html raíz es algo diferente, entonces escriba eso:

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

Después de hacer todo, reinicie apache usando el comando sudo service apache2 restart

Deval Khandelwal
fuente
6

Solo sigue 3 pasos

  1. Habilite mode_rewrite usando el siguiente comando

    sudo a2enmod reescribir

Se le pedirá contraseña. Entonces ingrese su contraseña

  1. Actualice su archivo 000-default.conf o default.conf ubicado en el directorio / etc / apache2 / sites-available / . No puedes editarlo directamente. así que usa el siguiente comando para abrir

    sudo gedit /etc/apache2/sites-available/000-default.conf

O sudo gedit /etc/apache2/sites-available/default.conf

conseguirás

DocumentRoot / var / www / html

O

DocumentRoot / var / www

línea. Agregue el siguiente código después.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Haga que el usuario la ruta de la etiqueta del directorio sea la misma que se muestra en su archivo.

  1. Reinicie su servidor apache usando el siguiente comando

    sudo service apache2 restart

Rameshwer Dhanora
fuente
Gracias. Saludos desde Brasil.
Fox.11
5

Lo más probable es que AllowOverride esté establecido en Ninguno. en la sección Directorio de apache2.conf ubicado en la carpeta / etc / apache2

Intenta configurarlo en AllowOverride All

KawaiKx
fuente
5

En mi experiencia, la directiva / var / www / directory evita las directivas de subhost de virtualhost de subcarpeta. Entonces, si ha probado todas las sugerencias y aún no funciona y está usando virtualhosts, intente esto;

1 - Asegúrese de tener una AllowOverride Alldirectiva en /etc/apache2/sites-available/example.com.conf

2 - Marque / var / www / Directivas de directorio en /etc/apache2/apache2.conf(posiblemente en la línea 164), que se ve así;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Si hay una AllowOverride Nonedirectiva cámbiela AllowOverride All o simplemente escape de la línea

Erdinç Çorbacı
fuente
3

Por defecto, Apache prohíbe el uso de un archivo .htaccess para aplicar reglas de reescritura, por lo que

Paso 1: habilitación de mod_rewrite (si no está habilitado) Primero, necesitamos activar mod_rewrite. Está disponible pero no habilitado con una instalación limpia de Apache 2.

$ sudo a2enmod rewrite

Esto activará el módulo o le avisará que el módulo ya está habilitado. Para que estos cambios surtan efecto, reinicie Apache.

$ sudo systemctl restart apache2

mod_rewrite ahora está totalmente habilitado. En el siguiente paso, configuraremos un archivo .htaccess que usaremos para definir reglas de reescritura para redireccionamientos.

Paso 2: configuración de .htaccess Abra el archivo de configuración predeterminado de Apache con nano o su editor de texto favorito.

$ sudo nano /etc/apache2/sites-available/000-default.conf

Dentro de ese archivo, encontrará un bloque que comienza en la primera línea. Dentro de ese bloque, agregue el siguiente bloque nuevo para que su archivo de configuración tenga el siguiente aspecto. Asegúrese de que todos los bloques estén sangrados correctamente.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

Guarde y cierre el archivo. Para que estos cambios surtan efecto, reinicie Apache.

$ sudo systemctl restart apache2

Hecho. Su .htacess debería funcionar. Este enlace puede ayudar a alguien https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04

Abayomi Israel
fuente
El comando de reinicio que funcionó para mí es $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg
3

Despejé este uso. Al usar este sitio, haga clic aquí , siga los pasos, los mismos pasos hasta la versión de Ubuntu 18.04

Raghul SK
fuente
1

En el WampServericono Abrir bandeja de WampServer ----> Apache ---> Módulos Apache ---> rewrite_module

Buru
fuente
0

use RewriteBase / {su carpeta} / en su .htaccess

miftah al rasyid
fuente
0

Para completar, si "AllowOverride All" no soluciona su problema, puede depurarlo usando:

  1. Ejecute apachectl -Sy vea si tiene más de un host de nombres. Puede ser que httpd esté buscando .htaccess de otro DocumentRoot.

  2. Use strace -f apachectl -Xy busque desde dónde se carga (o no carga) .htaccess desde.

gilm
fuente