Pergunta

Estou executando a versão gratuita do Helicon ISAPI reescrever no IIS e ter vários sites que passam pelo mesmo conjunto de regras de reescrita. Até agora, tudo bem, pois todas as regras se aplicaram a todos os sites. Recentemente, adicionei um novo site que não quero percorrer todas as regras. Existe alguma maneira de fazer solicitações para este site sair da regra definida após a execução de suas próprias regras.

Eu tentei o seguinte sem sorte; Todas as solicitações para o mysite.com resultam em um 404. Acho que o que estou procurando é uma regra que não faz nada e é marcada como a última regra a executar [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]
...
Foi útil?

Solução

Eu fiz algo semelhante, para parar mod_rewrite em uma pasta webdav:

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

Isso também deve funcionar para seus propósitos. Se não ou se você estiver interessado em referências adicionais, consulte esta pergunta anterior: Como ignoro um diretório em mod_rewrite?

Outras dicas

Reescrever para si mesmo?

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

Não sei a sintaxe do isapi reescrever, mas em Iirf, a regra "quebrar" é assim:

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

ou

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

Em cada caso, a regra diz "Não reescreva (e não processe mais regras)" e se aplica quando o nome do host usado é mysite.com ou www.mysite.com. A bandeira [l] é a parte que diz "Não processe mais regras" e a substituição - é a parte que diz "não reescreva".

RewriteRule ^ - [END]

  • . seria incorreto, pois requer pelo menos 1 char
  • .* poderia Seja menos eficiente IMHO
  • L é pior que o fim, pois permite rodadas adicionais, também em redirecionamentos internos. Só acaba com a verdadeira parar. → Detalhes
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top