2009-03-30 13 views
12

He estado usando reglas simples de mod_rewrite para mi CMS durante años y ahora estoy haciendo una nueva versión, estoy viendo que el rewriteCond no tiene sentido. Tengo el estándar "if is not an file" "pero todavía veo las reescrituras que se evalúan, aunque se supone que no deben hacerlo". Mi código de reescritura:.htaccess! -f rule not working

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ index.php?page=$1 
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2 

se carga/página/var y funciona bien como index.php? Page = página & var = var, pero trato de cargar /css/file.css y carga índice?. php? page = css & var = file.css a pesar de que /css/file.css es un archivo, por lo que toda la sección de reescritura ni siquiera debe ser evaluada.

Nunca he visto que htaccess aparentemente desafíe su propia lógica, ¿alguien me puede ayudar a resolver esto? ¿Alguien ha encontrado algo como esto?

Respuesta

3

Bueno, eso debería funcionar.

estableciendo los siguientes apoyos en su .htaccess Probar:

RewriteLog /var/log/rewrite.log 
RewriteLogLevel 3 

depurar sus peticiones. Recuerde restablecer este valor una vez que haya terminado, de lo contrario terminará con un disco duro lleno.

+0

+1 para las cosas RewriteLog, me ayudó a depurar mis reglas de reescritura. –

25

Las RewriteCondition s solo se aplican a la siguiente regla. ¿Quieres esto:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ index.php?page=$1 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)$ index.php?page=$1&var=$2 
+2

Eso es genial, después de todos estos años haciendo mod_rewrites como este resulta que mi lógica funcionó por accidente ... muchas gracias –

+0

increíble, ¡gracias! .. También es bueno tener en cuenta que si el archivo no existe , NO 404, pasará a la siguiente regla. – Roberto

+0

@Colin - mis sentimientos exactamente. Ahora tengo que averiguar si eso es un alivio o una preocupación ... – Ben

13

Si está utilizando Apache 2.2, entonces usted tiene que leer esto:

http://amandine.aupetit.info/135/apache2-mod_rewrite/

Spoiler: lo que se necesita para escribir es en realidad:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-l   

Merc.

+0

Agregando '% {DOCUMENT_ROOT}' problema resuelto. – hlcs

+1

He estado buscando esto por mucho tiempo, resolví totalmente mi problema (no estoy usando vhost, pero contenedor). ¡Gracias! – Gildas

+0

Dado que el autor de la pregunta no aceptará una respuesta, sería genial si mi respuesta obtuviera la mayor cantidad de votos positivos realmente ... – Merc