Detener la ejecución de Mod_Rewrite en RewriteCond correspondiente
-
04-07-2019 - |
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]
...
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