2009-05-08 26 views
5

Tiene problemas con expresiones regulares adecuada para RewriteCond¿Cómo hacer coincidir los subdirectorios en RewriteCond?

RewriteCond %{REQUEST_URI} !^/foo/ 

funciona como se espera, es decir, no se aplicará después de reescritura a todas las URL que comienzan con/foo /.

RewriteCond %{REQUEST_URI} !^/foo/bar/ 

Por otro lado, no funciona como esperaba. Las URL que comienzan con/foo/bar/aún se están reescribiendo.

¿Cómo ingreso la expresión regular correcta para excluir los subdirectorios?

+0

? ¿Cómo se ven las reglas actuales ¿me gusta? – Gumbo

+0

Debería funcionar. ¿Podría establecer un RewriteLog con un RewriteLogLevel de al menos 3 y agregarlo a su pregunta? –

Respuesta

7

Quizás sea la nueva URL de una redirección interna a la que se aplica la regla. El L flag hace eso.

[...] si el RewriteRule genera un redireccionamiento interno (que con frecuencia se produce cuando la reescritura en un contexto por directorio), esto reinyectar la solicitud y hará que el procesamiento que se repite a partir de la primera RewriteRule.

Si desea asegurarse de que la ruta URL inicial no se inició con “/ foo/bar”, compruebe el request line (ver THE_REQUEST variable) en su lugar:

RewriteCond %{THE_REQUEST} !^[A-Z]+\ /foo/bar/ 
RewriteRule … 
+0

No sé cómo ni por qué, pero esto funciona – edgars

+0

@Gumbo: ¿podría explicar exactamente la expresión regular que utilizó en su sugerencia? También funciona para mí, y supongo que coincide con el primer GET, pero no puedo entender el siguiente '/' y la razón por la que no hay dominio antes de '/ foo/bar /' – Stratboy

+0

@Stratboy. Espero que las páginas enlazadas explica todo. Bueno, el patrón '^ [A-Z] + \/foo/bar /' verifica la línea de solicitud HTTP como lo ve el analizador HTTP del servidor y la condición solo es verdadera cuando el patrón no coincide. Tal vez sea el '\ 'que te distrae pero que aún es parte del patrón. – Gumbo

Cuestiones relacionadas