Stop mod_rewrite Execution na correspondência rewritecond
-
04-07-2019 - |
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]
...
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