2017-02-22 2 views
0

Ich versuche, https und ein www-Präfix erzwingen. Meine Regel funktioniert jedoch nicht vollständig. Hier ist meine Regel:Web.config URL rewrite - erzwinge www prefix und 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> 

Bitte zu https://mydomain.co.uk/blah/whatever gehen kann? Vielen Dank. Hier

Antwort

3

ist ein Beispiel für eine solche web.config - es HTTPS für alle Ressourcen zwingen wird (unter Verwendung von 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> 

Quelle: https://stackoverflow.com/a/9823208/5740382

Für Details : https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

1

Das sind die Rewrite-Regeln, die ich für genau diesen Zweck verwende. Ich habe auch eine Regel hinzugefügt, um die URL in Kleinbuchstaben zu setzen, und eine Regel, um den nachgestellten Schrägstrich zu entfernen, sollte einer vorhanden sein. Dies vereinfacht die Arbeit mit Analytics, da page.aspx und page.aspx/als unterschiedliche URLs behandelt werden. Deshalb habe ich ignoreCase=true verwenden, weil dann spielt es keine Rolle, ob jemand Großbuchstaben verwendet irgendwo da sie durch die ToLowerCase Regel später behandelt werden

<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

Dank. Warum benutze 'stopProcessing =" true "'? Verhindert dies nicht, dass die folgenden Regeln verarbeitet werden? –

+0

Ja, tut es. "_ Eine Regel kann das StopProcessing-Flag aktiviert haben. Wenn dieses Flag aktiviert ist, bedeutet dies, dass keine nachfolgenden Regeln mehr verarbeitet werden und die von dieser Regel erzeugte URL an die IIS-Anforderungs-Pipeline übergeben wird (wenn die Regel übereinstimmt). Standardmäßig ist dieses Flag deaktiviert._ "Siehe https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrit-module-configuration-reference – VDWWD

+0

Das würde aber bedeuten wenn in der Anfrage sowohl das WWW-Präfix als auch das HTTPS-Protokoll fehlten. Das WWW-Präfix würde hinzugefügt werden, aber HTTPS würde nicht, weil keine Regeln mehr verarbeitet würden. –

Verwandte Themen