2016-10-19 4 views
0

Я пытаюсь разрешить только несколько URL-адресов в конкретном домене, все остальные запросы должны быть перенаправлены на 404 Not Found. Я знаю, как перенаправить конкретный URL-адрес на 404, но мне нужно как инверсия этого. Как написать такое правило, какие условия я должен использовать? Есть что-то вроде not match в синтаксисе правил?Как перенаправить все запросы за исключением нескольких, используя модуль перезаписи IIS

Итак, что я в настоящее время с помощью:

<rule name="Deny some request" enabled="true" stopProcessing="true"> 
     <match url="^(.*)$" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="(.*)(\.domain_regexp_here.*)$" negate="true" /> 
     <add input="{REQUEST_URI}" pattern="(.*)(somename)$" /> 
     </conditions> 
     <action type="Redirect" url="/Home/PageNotFound" appendQueryString="false" /> 
    </rule> 

Но поскольку сейчас слишком много таких правил, так что я могу даже пропустить некоторые из них, и именно поэтому я хочу, чтобы упростить немного, так что я разрешаю некоторые URL-адреса и перенаправляю все остальные в NotFound.

ответ

0

Хорошо, я нашел ответ. Ключ находится в состоянии negate="true":

<rule name="RequestBlockingRule1" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions> 
        <add input="{URL}" pattern="url path" negate="true" /> 
       </conditions> 
       <action type="CustomResponse" statusCode="404" statusReason="File or directory not found." statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." /> 
      </rule> 

Если URLs, чтобы позволить более чем один - добавить больше условий и положить logicalGrouping="MatchAll" в conditions узел.