此规则似乎运作良好,但当我转到this other answer时,它不会删除www。
但是,如果我转到https://www.example.com,它会按预期工作。
为什么不从https重定向?
<rewrite>
<rules>
<rule name="Remove WWW" stopProcessing="true">
<match url="^(.*)$"/>
<conditions>
<add input="{HTTP_HOST}" pattern="^(www\.)(.*)$"/>
</conditions>
<action type="Redirect" url="https://example.com{PATH_INFO}" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
答案 0 :(得分:2)
根据我上面的评论,您的规则在您描述的方案中实际上对我有效。但是,我不认为它在处理对主机名中不包含www
的不安全URL的请求时会处理这种情况。例如,http://example.com/blah/
不会被重定向。以下规则也处理了这种情况:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Remove WWW and Ensure HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^(www\.)" />
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://example.com{REQUEST_URI}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
规则检查以www
开头的主机名或不安全的请求。如果满足任一条件,则重定向用户。