2011-03-14 20 views
5

Ésta es mi .htaccess:mod_rewrite y .htaccess - dejar de escribir si existe script/archivo

RewriteEngine On 



# Stop if it's a request to an existing file. 

RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 

RewriteCond %{REQUEST_FILENAME} -d [NC] 

RewriteRule .* - [L] 



# Redirect all requests to the index page 

RewriteRule ^([^/])   /index.php   [L] 

Ahora bien, este envía todo para mi script index.php! No se detiene si existe una secuencia de comandos. Alguien tiene alguna idea de por qué esto no está funcionando? He buscado en todas partes, pero realmente no entiendo mod_rewrite (¡tanto como pensaba!).

El problema se ha producido porque he puesto etiquetas <script> que apuntan a los archivos .js en mi directorio web que luego se reenvían al script index.php. La barra de herramientas del desarrollador web me dice esto. :) Y al hacer clic en los enlaces a los archivos js en la ventana de fuente de vista de firefox, también se muestra el resultado de index.php.

gracias.

+0

desea reenviar todas las solicitudes que normalmente como resultado 404 a index.php, es así? – vbence

+0

Sí, básicamente :) –

Respuesta

8

Esto se debe a que después de procesar una regla de reescritura todo el proceso se reinicia con la nueva url. El procesamiento de una url puede ir a través de las reglas una y otra vez cada vez con la URL modificada, hasta que no haya más cambios (no se encuentran reglas de aplicación).

usted necesita este:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)   /index.php   [L] 

No piense en las normas como un programa, que son reglas que pueden solaparse y deben ser lo más específico posible con cada uno.

+0

Hola, gracias por tu respuesta. Lamentablemente, su código me da un error de 500 servidores. :( –

+0

@Thomas Clayson Acabo de combinar sus reglas. Lo modifiqué un poco para reenviar todas las solicitudes inexistentes a 'index.php'. – vbence

+0

¡Ah, ya veo, su edición tiene sentido, y parece funcionar! No tengo idea de por qué la mina dosen 't ...:/ah bueno, se quedará con el tuyo :) Gracias –

1

Creo que se debe añadir [O] después de la primera condición de la siguiente manera:

RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule (.*) $1 [QSA,L] 
Cuestiones relacionadas