您在GitHub页面上托管的网页前使用IIS重写和重定向规则有两个问题。
重写为GitHub页面
更新:一切都很完美。正如本问题后面所述,GitHub Pages重定向到规范URL。在点击GitHub页面之前添加重写附加缺失的尾部斜杠:
<rule name="Add Trailing Slash" stopProcessing="true">
<match url=".*[^/]$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" pattern=".+?\.\w+$" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Redirect" url="{ToLower:{R:0}}/" />
</rule>
该网站托管在GitHub页面上,可在此处找到:http://elmahio.github.io/blog/
。
为了重写对我的代理的请求,我添加了以下重写规则:
<rule name="Proxy" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_URI}" negate="true" pattern="^(.*)/.well-known/(.*)$"/>
</conditions>
<action type="Rewrite" url="http://elmahio.github.io/blog/{R:1}" />
</rule>
重写规则就像魅力一样。但是如果有人忘记了URL的尾部斜杠,它似乎会重定向到GitHub页面版本。例如:
https://blog.elmah.io/great-dot-net-conferences-to-attend
重定向到http:// elmahio.github.io/blog/great-dot-net-conferences-to-attend/
我可以看到,如果不存在,GitHub Pages会自动附加尾部斜杠。这甚至可能是主要问题,因为我的代理重写到GitHub,然后重定向以附加尾部斜杠。
有关如何解决此问题的任何想法?也许在我的代理中添加一个重定向规则,在重写到GitHub页面之前附加斜杠?
重定向到HTTPS
更新:删除我的自定义重定向规则并在Azure上的自定义域视图中启用仅HTTPS ,解决了此问题
我希望所有请求都发送到非https网址,并重定向到HTTPS。我已经将重定向规则添加到web.config
,如下所示:
<rule name="RedirectToHTTPS" stopProcessing="true">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true"/>
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/{R:1}" redirectType="Permanent"/>
</rule>
重写规则适用于包含路径的URL。例如:
http://blog.elmah.io/great-dot-net-conferences-to-attend/重定向到https://blog.elmah.io/great-dot-net-conferences-to-attend/
但是,在没有HTTPS的情况下访问首页(http://blog.elmah.io/或http://blog.elmah.io)时,我不会被重定向到HTTPS网址。
这里可能出现什么问题?
答案 0 :(得分:1)
所有重写都是正确的。由于GitHub页面,很可能存在问题。尝试执行以下操作:
1)创建一个附加尾部斜杠的规则。您可以在此主题IIS URL Rewrite: Add trailing slash except for .html and .aspx
中找到重写规则的示例2)您可以在Azure上的自定义域视图上启用仅HTTPS,而不是使用重写规则重定向到HTTPS