2012-08-06 17 views
10

Iam tratando de redirigir mi página de inicio o cualquier otra página en el sitio a una página php en particular. Esta es mi htaccess.htaccess no se lee

Redirect 301 http://test.com/info http://test.com/get_forms_data.php 
Options +FollowSymlinks 
RewriteEngine ON 
RewriteRule ^test.php$ http://test.com/get_forms_data.php [R=301,L] 

He comprobado mi .rewrite servidor Apache está activado.

Todavía no funciona.

+0

¿El archivo tiene los permisos adecuados? – Viehzeug

+2

¿Obtiene un error cuando deliberadamente introduce un error en el archivo? (Para ver si se analiza en absoluto) –

+0

@Viehzeug - sí, he dado los permisos adecuados. – user1411837

Respuesta

25

Si no importa lo que puso en su archivo .htaccess, que ni siquiera conseguir un error, eso significa que es probable que necesita tener

AllowOverride All

conjunto en la configuración del sitio.

Si está en ubuntu, el lugar para buscar la configuración es /etc/apache2/sites-available/. Allí debe encontrar un archivo llamado default si se trata de una instalación en stock de la pila predeterminada LÁMPARA (https://help.ubuntu.com/community/ApacheMySQLPHP).

La parte clave está esto:

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

Ahora cambiar AllowOverride None-AllowOverride All. Después de que no se olvide de reiniciar el apache, así:

$ service apache2 restart 
+0

para mí es un problema diferente – lbennet

8

Como complemento a la respuesta de Morgan, poniendo AllowOverride All en su máquina virtual que a veces no es suficiente. Tenía esto en mi máquina virtual:

<VirtualHost *:80> 
    ... 
    <Directory /> 
    ... 
    AllowOverride All 
    ... 
    </Directory> 
</VirtualHost> 

que se puede esperar que esto funcione, no es cierto, <Directory /> significa que se debe aplicar a todas partes en el sistema de archivos. Pero .htaccess todavía estaba siendo ignorado. Reiniciar el servidor no ayudó. Puse basura en el archivo .htaccess para confirmar que no se estaba leyendo.

Mi error fue suponer que un host virtual anula la configuración global. Algo así: mi configuración anterior anula cualquier configuración global para el directorio /. Pero la configuración global lo reemplaza por /var/www/ y más abajo. Mi solución es:

<VirtualHost *:80> 
    ... 
    <Directory /var/www> 
    ... 
    AllowOverride All 
    ... 
    </Directory> 
</VirtualHost> 

(esto supone que ninguno de la otra configuración necesaria para aplicar el exterior /var/www; si lo hace, crea un bloque separado <Directory /> para la configuración sólo que especial.)

1

he tenido problemas con el mismo problema, y ​​la respuesta de Darren Cook me dio la clave definitiva para encontrar la solución.

Mi aplicación estaba en alguna carpeta fuera de la ruta pública www, es decir en /opt/my_app. no pude crear un VirtualHost, por lo que creó un enlace simbólico en público www ponting de Apache a mi carpeta:

/var/www/html/my_app -> /opt/my_app

Lo está, en el archivo de configuración de Apache de mi aplicación, que se especifiquen:

<Directory /opt/my_app> 
    AllowOverride All 
</Directory> 

Y mi archivo .htaccess no se estaba leyendo. Entonces vi que en la configuración de Apache no fue lo siguiente:

<Directory /var/www/html> 
    AllowOverride None 
</Directory> 

Entonces me di cuenta de que archivos de configuración de Apache no se preocupan por los enlaces simbólicos, y por lo tanto la regla general se aplicaba a foler de mi aplicación. Cambié Directory a:

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

Y todo funcionó.

+0

que hizo mi día! Muchas gracias – netzaffin

Cuestiones relacionadas