Accessing URL Parts from a Rewrite Rule
It is important to understand how certain parts of the URL string can be accessed from a rewrite rule.
For an HTTP URL in this form: http(s)://<host>:<port>/<path>?<querystring>
- The <path> is matched against the pattern of the rule.
- The <querystring> is available in the server variable called QUERY_STRING and can be accessed by using a condition within a rule.
- The <host> is available in the server variable HTTP_HOST and can be accessed by using a condition within a rule.
- The <port> is available in the server variable SERVER_PORT and can be accessed by using a condition within a rule.
- Server variables SERVER_PORT_SECURE and HTTPS can be used to determine if a secure connection was used. These server variables can be accessed by using a condition within a rule.
- The server variable REQUEST_URI can be used to access the entire requested URL path, including the query string.
For example, if a request was made for this URL: http://www.mysite.com/content/default.aspx?tabid=2&subtabid=3, and a rewrite rule was defined on the site level then:
- The rule pattern gets the URL string content/default.aspx as an input.
- The QUERY_STRING server variable contains tabid=2&subtabid=3.
- The HTTP_HOST server variable contains www.mysite.com.
- The SERVER_PORT server variable contains 80.
- The SERVER_PORT_SECURE server variable contains 0 and HTTPS contains OFF.
- The REQUEST_URI server variable contains /content/default.aspx?tabid=2&subtabid=3.
- The PATH_INFO server variable contains /content/default.aspx.
Note that the input URL string passed to a distributed rule is always relative to the location of the Web.config file where the rule is defined. For example, if a request is made for http://www.mysite.com/content/default.aspx?tabid=2&subtabid=3, and a rewrite rule is defined in the /content directory, then the rule gets this URL string default.aspx as an input.
以下配置需放在</system.webServer></configuration>
<rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="SeeOther" /> </rule> </rules> </rewrite>