2017-02-22 31 views
0

Я пытаюсь использовать https и префикс www. Однако мое правило не полностью работает. Вот мое правило:Web.config URL rewrite - force www prefix и https

<rewrite> 
    <rules> 
    <clear />    
    <rule name="Force https" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions> 
      <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
     </conditions> 
     <action type="Redirect" url="https://www.mydomain.co.uk/{R:1}" redirectType="Permanent" /> 
    </rule> 
    <rule name="Force www" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions> 
      <add input="{HTTP_HOST}" pattern="localhost" negate="true" /> 
      <add input="{HTTP_HOST}" pattern="www.mydomain.co.uk" negate="true" /> 
     </conditions> 
     <action type="Redirect" url="https://www.mydomain.co.uk/{R:1}" redirectType="Permanent" /> 
    </rule>   
    </rules> 
</rewrite> 

Пожалуйста, может кто-нибудь посоветовать? Благодарю.

ответ

3

Вот пример такого web.config - это заставит HTTPS для всех ресурсов (с использованием 301 Permanent Redirect):

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="HTTP Redirect to HTTPS" enabled="true" stopProcessing="true"> 
        <match url="(.*)" ignoreCase="false" /> 
         <conditions> 
          <add input="{HTTPS}" pattern="off" /> 
         </conditions> 
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" /> 
       </rule> 
      </rules> 
    </rewrite> 


    <rewrite> 
     <rules> 
      <rule name="Redirects to www.example.com" patternSyntax="ECMAScript" stopProcessing="true"> 
       <match url=".*" /> 
        <conditions logicalGrouping="MatchAny"> 
         <add input="{HTTP_HOST}" pattern="^example.com$" /> 
        </conditions> 
        <action type="Redirect" url="https://www.example.com/{R:0}" /> 
       </rule> 
      </rules> 
     </rewrite>   
</system.webServer> 

Источник: https://stackoverflow.com/a/9823208/5740382

для более подробной информации : https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

1

Это правила перезаписи, которые я использую для этой цели. Я также добавил правило, чтобы сделать URL-адрес все строчными буквами и правило, чтобы удалить конечную косую черту, если она присутствует. Это упрощает работу с Analytics, так как обрабатывает page.aspx и page.aspx/как разные URL-адреса. Именно поэтому я использую ignoreCase=true, потому что тогда это не имеет значения, если кто-то использует верхний регистр где-то, так как он будет обработан в дальнейшем по ToLowerCase правилу

<rule name="ForceWWW" stopProcessing="true"> 
    <match url=".*" ignoreCase="true" /> 
    <conditions> 
    <add input="{HTTP_HOST}" pattern="^yoursite.com" /> 
    </conditions> 
    <action type="Redirect" url="https://www.yoursite.com/{R:0}" redirectType="Permanent" /> 
</rule> 

<rule name="HTTPtoHTTPS" stopProcessing="true"> 
    <match url="(.*)" ignoreCase="false" /> 
    <conditions> 
    <add input="{HTTPS}" pattern="off" /> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> 
</rule> 

<rule name="RemoveTrailingSlash"> 
    <match url="(.*)/$" /> 
    <conditions> 
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Redirect" redirectType="Permanent" url="{R:1}" /> 
</rule> 

<rule name="ToLowerCase"> 
    <match url=".*[A-Z].*" ignoreCase="false" /> 
    <action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" /> 
    <conditions> 
    <add input="{URL}" pattern="WebResource.axd" negate="true" /> 
    <add input="{URL}" pattern="ScriptResource.axd" negate="true" /> 
    </conditions> 
</rule> 
+0

Спасибо. Зачем использовать 'stopProcessing =" true "'? Разве это не предотвращает обработку следующих правил? –

+0

Да, да. Правило «_A может иметь флаг StopProcessing включен. Когда этот флаг включен, это означает, что последующие правила не будут обработаны, а URL-адрес, созданный этим правилом, будет передан в конвейер запросов IIS (если это согласовано с правилом). По умолчанию этот флаг отключен. «См. Https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference – VDWWD

+0

Но это будет означать если в запросе отсутствовали как префикс WWW, так и протокол HTTPS. Префикс WWW будет добавлен, но HTTPS не будет, потому что больше правил не будет обработано. –

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

  • Нет связанных вопросов^_^