IIS重写和重定向规则在我的网站上不起作用

时间:2018-01-04 10:14:36

标签: asp.net iis github-pages

您在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网址。

这里可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

所有重写都是正确的。由于GitHub页面,很可能存在问题。尝试执行以下操作:

1)创建一个附加尾部斜杠的规则。您可以在此主题IIS URL Rewrite: Add trailing slash except for .html and .aspx

中找到重写规则的示例

2)您可以在Azure上的自定义域视图上启用仅HTTPS,而不是使用重写规则重定向到HTTPS