IIS重写/重定向规则在GitHub Pages代理中的问题排查
IIS Rewrite/Redirect Issues When Proxying to GitHub Pages Hosted Sites
我最近处理了用IIS重写/重定向规则代理GitHub Pages站点时遇到的两个棘手问题,整理下解决方案和思路,帮大家避坑:
问题1:缺少末尾斜杠时请求跳转到GitHub Pages原地址
现象
代理重写规则本身能正常工作,但当访问的URL没有末尾斜杠时(比如http://blog.elmah.io/posts),请求会被自动重定向到GitHub Pages的原始地址(比如http://elmahio.github.io/blog/posts/),而不是我们的代理域名。
原因
这是GitHub Pages自带的自动补全斜杠机制导致的,当它检测到路径应该带斜杠时,会直接跳转到自己的域名下的对应路径,绕过了我们的代理。
解决方案
在代理规则之前添加一个补全末尾斜杠的重定向规则,确保所有符合条件的请求先补上斜杠,再走代理逻辑。规则代码如下:
<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>
对应的原代理重写规则如下(注意顺序:补斜杠规则要放在这个代理规则前面):
<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>
问题2:首页无法从HTTP重定向到HTTPS
现象
自定义的HTTPS重定向规则对带路径的URL(比如http://blog.elmah.io/posts)有效,但访问首页时——不管是http://blog.elmah.io/还是http://blog.elmah.io——都无法自动跳转至HTTPS。
解决方案
尝试调试自定义规则无果后,我直接删掉了自己写的重定向规则,转而在Azure站点设置里启用HTTPS Only功能,问题瞬间解决,所有URL(包括首页)都能正常跳转到HTTPS了。
给大家参考下那个失效的自定义HTTPS重定向规则:
<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>
内容的提问来源于stack exchange,提问作者ThomasArdal
相关产品推荐
相关产品推荐

