我正在构建一个ASP.NET CMS驱动的Web应用程序,它将为不同域名下的多个网站提供服务。其中一些将使用www子域,其他将使用自定义子域。将有各种顶级国家域名。
我正在寻找一个通用的IIS网址重写规则,该规则会将任何不指定子网域的网址重定向到其www等效网页。
当我说通用时,这意味着该规则无法对域名或顶级国家/地区域进行硬编码。因此规则必须重定向 http://anything.anywhere/any-path至http://www.anything.anywhere/any-path,但请http://sub.anything.anywhere/any-path。
我发现的最接近的是this仍然硬编码TLCD。如果不了解URL Rewrite的语法,我就不知道如何处理任何TLCD。
提前致谢。
更新
受到评论的启发,我已经开始使用正则表达式,但还没有找到一种方法,不需要我对所有可能的TLCD列表进行硬编码。我怀疑这是我能得到的最好的。任何人都可以改进或确认这个答案吗?
^([a-z]+[.](com|co.uk|de|fr|etc)+)*
答案 0 :(得分:3)
我只是使用具有两个条件的重写规则完成相同的操作,一个用于获取Scheme,另一个用于确定是否缺少www。该方案是必要的,因为重定向必须是绝对的,但如果您不支持可以硬编码的HTTPS。请记住,我还没有时间测试HTTPS部分,但很确定它能正常工作。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Root Redirect" stopProcessing="true">
<match url=".*" negate="false" />
<action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:0}" />
<conditions trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.*)://" />
<add input="{HTTP_HOST}" pattern="^(?!www\.).*" />
</conditions>
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>