2013-07-18 4 views
22

Мне нужно перенаправить URL-адреса, не связанные с WWW, на URL-адрес для URL-адресов http и https. Я пробовал следовать правилам в web.config.web.config перенаправить не-www на www

<rule name="Redirect to WWW" stopProcessing="true"> 
<match url=".*" /> 
<conditions> 
    <add input="{HTTP_HOST}" pattern="^domain.com$" /> 
</conditions> 
<action type="Redirect" url="http://www.domain.com/{R:0}" redirectType="Permanent" /> 

<rule name="Redirect to WWW https" stopProcessing="true"> 
<match url=".*" /> 
<conditions> 
    <add input="{HTTPS}" pattern="^domain.com$" /> 
</conditions> 
<action type="Redirect" url="https://www.domain.com/{R:0}" redirectType="Permanent" /> 

Он отлично работает для не защищенных URL, но в случае его SSL перенаправление с https://domain.com на http://www.domain.com

Пожалуйста, помогите мне исправить мои правила.

+1

Первое правило улавливает как типы запросов, так и второе не обрабатывается – Dima

ответ

40

Для более безопасного правила, действующего для ситуаций Match Any и Match All, вы можете использовать решение Rewrite Map. Это идеальное решение, единственным недостатком которого является столь небольшое дополнительное усилие, чтобы настроить его, поскольку вам нужно создать карту перезаписи до того, как вы создадите правило. Другими словами, если вы решите использовать это в качестве единственного метода обработки протокола, вы будете в безопасности.

Вы можете создать Rewrite Map под названием MapProtocol, вы можете использовать протокол {MapProtocol:{HTTPS}} для протокола в рамках любого действия правила.

<rewrite> 
    <rules> 
    <rule name="Redirect to www" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="^domain.com$" /> 
     </conditions> 
     <action type="Redirect" 
     url="{MapProtocol:{HTTPS}}://www.domain.com/{R:1}" /> 
    </rule> 
    </rules> 
    <rewriteMaps> 
    <rewriteMap name="MapProtocol"> 
     <add key="on" value="https" /> 
     <add key="off" value="http" /> 
    </rewriteMap> 
    </rewriteMaps> 
</rewrite> 

Reference

+2

Это правило принудительно перенаправляет все мои ссылки на https. Что мне нужно, если это http + non-www, он должен перенаправить на http + www , а https + non-www следует перенаправить на https + www – Anand

+2

. Это работало отлично. Большое спасибо – Anand

+5

Стоит отметить, что вам нужен URL Rewrite Module 2.0 ([http://www.iis.net/downloads/microsoft/url-rewrite](http://www.iis.net/downloads/microsoft/url -rewrite)), чтобы это сработало. –

1

Я знаю, что это старый пост, но это не полный ответ. Я в конечном итоге расширения Satpals answer

Первое правило ловит HTTP + WWW и второй один ловит не-WWW

По какой-то причине я не мог использовать MapProtocol в кулак Правилом, но он работает с HTTPS, написанные непосредственно в URL.

<rewrite> 
    <rules> 
    <rule name="Special case www &amp; HTTPS off" enabled="true" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="^www\.example\.com$" /> 
     <add input="{HTTPS}" pattern="off" /> 
     </conditions> 
     <action type="Redirect" url="https://www.example.com/{R:1}" redirectType="SeeOther" /> 
    </rule> 
    <rule name="Redirect to www &amp; HTTPS" enabled="true" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions trackAllCaptures="false"> 
     <add input="{HTTP_HOST}" pattern="^example\.com$" /> 
     </conditions> 
     <action type="Redirect" url="{MapProtocol:{HTTPS}}://www.example.com/{R:1}" redirectType="SeeOther" /> 
    </rule> 
    </rules> 
    <rewriteMaps> 
    <rewriteMap name="MapProtocol"> 
     <add key="on" value="https" /> 
     <add key="off" value="http" /> 
    </rewriteMap> 
    </rewriteMaps> 
</rewrite> 
+0

Это сработало для меня! –

3

Другие ответы здесь не нужны длинные, вот правило я использую (просто скопировать и вставить):

<rule name="ensurewww" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions> 
    <add input="{CACHE_URL}" pattern="^(.+)://(?!www)(.*)" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}://www.{C:2}" redirectType="Permanent" /> 
</rule> 

будет переадресован на версию WWW, сохраняя HTTP и HTTPS протокол

Надеюсь, это поможет.

Смежные вопросы