93

Tengo un servidor del servicio ec2 de Amazon que se ejecuta en linux ubuntu y he instalado apache, php y mysql. He agregado un archivo .htaccess en mi raíz de documento /var/www/html. Ingresé este código en él: ErrorDocument 404 /var/www/html/404.php y todavía no aparece. Seguí ingresando este comando varias veces: sudo service httpd restart para reiniciar el servidor pero no se muestran cambios ... ¿Cómo puedo solucionarlo ... ¿Hice algo mal? ¡Gracias por adelantado!.htaccess no funciona apache

+2

¿Seguro que desea asignar el error 400 'Mala request' a '/ var/www/html/404. php'? –

Respuesta

211

En primer lugar, tenga en cuenta que no es necesario reiniciar httpd 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 están ignorando los archivos .htaccess, debe verificar que AllowOverride esté configurado correctamente. Vea 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 derecho de su configuración. Asegúrese de que está NOT editando uno en el bloque, por ejemplo.

En tercer lugar, si quiere asegurarse de que se está leyendo un archivo .htaccess, ponga la basura en él. Una línea no válida, como "LÍNEA NO VÁLIDA AQUÍ", en su archivo .htaccess, provocará un error de 500 Server cuando apunte su navegador al directorio que contiene ese archivo. Si no lo hace, entonces no tiene AllowOverride configurado correctamente.

+39

+1 para AllowOverride parte – rikpg

+95

+1 para colocar basura en el archivo .htaccess como herramienta de diagnóstico. – retrohacker

+32

La basura en la programación es más útil de lo que parece. – EnKrypt

78
  1. Configurar Apache mod_rewrite

    a2enmod rewrite

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

    AllowOverride All

  3. Apache Restart

    /etc/init.d/apache2 restart

+7

tenga en cuenta que en Apache 2.4 la configuración los archivos en/etc/apache2/sites-available deben terminar en .conf ahora. Y tuve una confusión en mi servidor con un default.conf en/etc/apache2/sites-available y uno en/etc/apache2/ – rubo77

+1

Gracias, en mi caso la reescritura no estaba habilitada por defecto en apache2 – Cross

+0

ya lo sigo pasos pero no funciona en apache 2.4 lo que estoy haciendo mal = [ –

1

En WampServer icono de la bandeja WampServer abierto ----> Apache ---> Módulos Apache ---> rewrite_module

29

Si ha intentado todo lo anterior, que son todas válidas y buenas respuestas, y su archivo htaccess no funciona o se lee, cambie la directiva en el archivo apache2.conf. En Ubuntu, la ruta es /etc/apache2/apache2.conf

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

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

que tenía el mismo problema y encontré la respuesta y explicación sobre el Ubuntu preguntar! foro https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working

+1

O, se puede agregar en el VHost –

+0

En realidad, solo se requiere '' AllowOverride FileInfo'' en la 3ra línea para que se lea y use el archivo '.htaccess'. '' All'' también permite anulaciones de configuración adicionales, como '.httpasswd' (que se puede habilitar individualmente usando' 'Authconfig'' en lugar de' 'All''). – Rafal

+0

¡Muchas gracias! – simhumileco

0

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

10

Para Ubuntu,
primer lugar, ejecute este comando: -

sudo a2enmod rewrite 

A continuación, editar el archivo /etc/apache2/sites-available/000-default.conf usando nano o vim utilizando este comando: -

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

Luego, en el archivo 000-default.conf, agréguelo después de la línea DocumentRoot /var/www/html. Si el directorio raíz html es algo distinto, entonces escribir que: -

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

Después de hacer todo, reinicie Apache con el comando sudo service apache2 restart

4

Lo más probable es AllowOverride se establece en Ninguno. en la sección Directorio de apache2.conf ubicado en/etc/apache2 carpeta

Inténtelo a AllowOverride All

1

sólo tienes que seguir 3 pasos

  1. Habilitar mode_rewrite usando los siguientes comandos

    sudo a2enmod reescriba

Se le pedirá la contraseña. Así que introduzca su contraseña

  1. actualización de su 000-default.conf o default.conf archivo encuentra en /etc/apache2/sites-available/directorio . no puedes editarlo directamente a fin de utilizar siguiente comando para abrir

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

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

obtendrá

DocumentRoot/var/www/html

O

DocumentRoot/var/www

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

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

Hacer que el usuario la ruta de la etiqueta del directorio es la misma que se muestra en el archivo.

  1. Reinicie el servidor Apache usando los siguientes comandos

    sudo service apache2 restart

0

En mi experiencia,/var/www/directory directive previene las directivas de la subcarpeta virtualhost. Por lo tanto, si ha probado todas las sugerencias y aún no funciona y está utilizando hosts virtuales, intente esto;

1 - Asegúrese de que tiene AllowOverride All Directiva en /etc/apache2/sites-available/example.com.conf

2 - Comprobar directivas/var/www/Directory en /etc/apache2/apache2.conf (posiblemente en la línea 164), que se parece;

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

Si hay un cambio AllowOverride None Directiva a AllowOverride All o simplemente escapar de la línea

Cuestiones relacionadas