Остановить выполнение Mod_Rewrite при совпадении RewriteCond - PullRequest
6 голосов
/ 23 октября 2008

Я использую бесплатную версию Helicon ISAPI Rewrite на IIS, и у меня есть несколько сайтов, использующих один и тот же набор правил перезаписи. До сих пор это было нормально, так как все правила распространялись на все сайты. Я недавно добавил новый сайт, который я не хочу выполнять по всем правилам. Есть ли способ заставить запросы этого сайта выходить за пределы набора правил после того, как он выполнил свои собственные правила.

Я попробовал следующее без удачи; все запросы к mysite.com приводят к 404. Я думаю, что я ищу, это правило, которое ничего не делает и помечается как последнее правило для выполнения [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]
...

Ответы [ 4 ]

9 голосов
/ 23 октября 2008

Я сделал нечто подобное, чтобы остановить mod_rewrite в папке WebDAV:

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

Это должно работать и для ваших целей. Если нет или если вы заинтересованы в дополнительных ссылках, см. Этот предыдущий вопрос: Как мне игнорировать каталог в mod_rewrite?

1 голос
/ 15 июля 2009

Я не знаю синтаксис ISAPI Rewrite, но на IIRF правило "разрыва" выглядит так:

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

или

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

В каждом случае правило гласит: «не переписывать (и больше не обрабатывать правила)» и применяется, когда используемое имя хоста - mysite.com или www.mysite.com. Флаг [L] - это часть, которая говорит «не обрабатывать больше правил», а замена - это часть, которая говорит «не переписывать».

1 голос
/ 23 октября 2008

Переписать это себе?

RewriteCond  Host:  (?:www\.)?mysite\.com
RewriteRule ^(.*)$ $1 [QSA,L]
0 голосов
/ 25 ноября 2017

RewriteRule ^ - [END]

  • . будет неверно, так как для этого требуется как минимум 1 символ
  • .* может быть менее эффективным ИМХО
  • L хуже, чем END, так как он допускает дополнительные раунды, также на внутренних перенаправлениях. Только END действительно останавливается. → Подробности
...