Pregunta

Estoy ejecutando la versión gratuita de Helicon ISAPI Rewrite en IIS y tengo varios sitios ejecutando el mismo conjunto de reglas de reescritura. Hasta ahora, esto ha estado bien ya que todas las reglas se han aplicado a todos los sitios. Recientemente agregué un sitio nuevo que no quiero revisar todas las reglas. ¿Hay alguna forma de hacer que las solicitudes a este sitio salgan del conjunto de reglas después de que se ejecuten sus propias reglas?

He intentado lo siguiente sin suerte; todas las solicitudes a mysite.com dan como resultado un 404. Supongo que lo que estoy buscando es una regla que no hace nada y está marcada como la última regla para ejecutar [L].

## New site rule for mysite.com only
RewriteCond  Host:  (?:www\.)?mysite\.com
RewriteRule  /content([\w/]*)   /content.aspx?page=$1 [L]

## Break out of processing for all other requests to mysite.com
RewriteCond  Host:  (?:www\.)?mysite\.com
RewriteRule (.*) - [L]

## Rules for all other sites
RewriteRule ^/([^\.\?]+)/?(\?.*)?$ /$1.aspx$2 [L]
...
¿Fue útil?

Solución

He hecho algo similar, para detener mod_rewrite en una carpeta WebDAV:

# stop processing if we're in the webdav folder
RewriteCond %{REQUEST_URI} ^/webdav [NC]
RewriteRule .* - [L]

Eso debería funcionar para tus propósitos también. Si no, o si está interesado en referencias adicionales, vea esta pregunta anterior: ¿Cómo ignoro un directorio en mod_rewrite?

Otros consejos

¿Reescribirlo a sí mismo?

RewriteCond  Host:  (?:www\.)?mysite\.com
RewriteRule ^(.*)$ $1 [QSA,L]

No sé la sintaxis de la reescritura de ISAPI, pero en IIRF , la " ruptura " La regla es así:

## Break out of processing for all other requests to mysite.com
RewriteCond %{SERVER_NAME}  ^(?:www\.)?mysite\.com$
RewriteRule (.*) - [L]

o

## Break out of processing for all other requests to mysite.com
RewriteCond %{HTTP_HOST}  ^(?:www\.)?mysite\.com$
RewriteRule (.*) - [L]

En cada caso, la regla dice " no reescribir (y no procesemos más reglas) " y se aplica cuando el nombre de host utilizado es mysite.com o www.mysite.com. La bandera [L] es la parte que dice " no procesar más reglas " y el - reemplazo es la parte que dice " no reescribir " ;.

RewriteRule ^ - [END]

  • . sería incorrecto, ya que requiere al menos 1 carácter
  • . * podría ser IMHO menos eficiente
  • L es peor que END, ya que permite rondas adicionales, también en redirecciones internas. Sólo el FIN realmente se detiene. ? Detalles
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top