2010-04-26 18 views
5

Estoy usando Apache y quiero redirigir todas las solicitudes recibidas al host virtual ssl.Regex: cómo hacer coincidir todo excepto un patrón en particular

Así que tienen la línea siguiente en el servidor virtual HTTP normal:

RedirectMatch https://www.mydomain.com $ 1

el que, básicamente, en lugar de $ 1 en todo (*.).

Funciona perfectamente. Pero ahora, necesito acceder a un CGI particular que no puede estar en el host virtual SSL. Así que me gustaría volver a dirigir todas las solicitudes, excepto los siguientes:

"http://www.mydomain.com/mycgi/cgi.php"

Tengo buscar en este foro y encontré algunos post en relación con la exclusión de expresiones regulares, pero ninguno funciona. Cualquier ayuda sería muy apreciada.

Gracias. Alain

Respuesta

2

Apache 2.2 y versiones posteriores tienen soporte de búsqueda negativa en expresiones regulares. Si está utilizando Apache 2.2 o posterior, esto debería funcionar:

RedirectMatch ^/(?!mycgi/cgi.php)(.*) https://www.mydomain.com/$1 
+0

Muchas gracias. Funciona perfectamente ¡Ha resuelto en menos de 30 minutos en lo que estaba trabajando durante casi 8 horas! – Alain

+0

¿Funciona bien si la url es: mycgitest/cgi.php? – Felix

1

Creo que el RedirectMatch es un short-circuit sorta deal. Lo que esto significa es que si coloca otro RedirectMatch por delante de su coincidencia, solo se ejecutará la primera coincidencia. así que algo así como ...

RedirectMatch (/mycgi/cgi.php) http://www.mydomain.com$1 
RedirectMatch (.*) https://www.mydomain.com$1 
+0

+1 Usted me ganó unos segundos. Su primera regla debe redireccionar a 'http' y es posible que desee agregar una '/' inicial a ella también. –

+0

¿No generará esa primera regla un bucle de redireccionamiento? –

+0

¡Guau ... fue rápido! Pero desafortunadamente al poner esta línea en mi host virtual "normal no SSL", no funciona. Firefox me dio ese error: Firefox ha detectado que el servidor está redireccionando la solicitud de esta dirección de una manera que nunca se completará. Y creo que esto es normal porque le pedimos a Apache que redirija. Entonces, Apache recibe la solicitud, la compara con la primera expresión regular y luego la redirige a sí mismo, vuelve a coincidir, y así sucesivamente. Tu idea sobre eso? Intenté colocar la línea en mi servidor virtual SSL, pero se ignora. Alain – Alain

Cuestiones relacionadas