IIS 的 www 重写规则 Web.config 不工作

www Rewrite Rules for IIS Web.config Not Working

我在 IIS 中有一个重写规则,应该将没有 'www' 的入站 URL 重写为 'www'。重写规则实际上是重写 URL 以包含 'www',但它将访问者引导至 /index.php 而不是将他们发送到他们试图到达的 link .

如果您想了解 php 扩展,我在 Windows 上使用 Joomla。我的重写规则写在 web.config 文件中。目前我的非 www 到 www 规则是第三条规则,我猜这可能是问题所在。前两个重写规则是 SEF 的 Joomla 默认规则。有谁知道将它移到第一条规则是否可以解决问题?

<rewrite>
           <rules>
               <rule name="Joomla! Rule 1" stopProcessing="true">
                   <match url="^(.*)$" ignoreCase="false" />
                   <conditions logicalGrouping="MatchAny">
                       <add input="{QUERY_STRING}" pattern="base64_encode[^(]*\([^)]*\)" ignoreCase="false" />
                       <add input="{QUERY_STRING}" pattern="(>|%3C)([^s]*s)+cript.*(&lt;|%3E)" />
                       <add input="{QUERY_STRING}" pattern="GLOBALS(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
                       <add input="{QUERY_STRING}" pattern="_REQUEST(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
                   </conditions>
                   <action type="CustomResponse" url="index.php" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
               </rule>
               <rule name="Joomla! Rule 2" enabled="true">
                   <match url="(.*)" ignoreCase="false" />
                   <conditions logicalGrouping="MatchAll">
                     <add input="{URL}" pattern="^/index.php" ignoreCase="true" negate="true" />
                     <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                   </conditions>
                   <action type="Rewrite" url="index.php" />
               </rule>
               <rule name="Redirect to WWW" stopProcessing="true">
                  <match url=".*" />
                  <conditions>
                     <add input="{HTTP_HOST}" pattern="^example.com$" />
                  </conditions>
                  <action type="Redirect" url="http://www.example.com/{R:0}" redirectType="Permanent" />
               </rule>
           </rules>
       </rewrite>

您的第一条规则 (Joomla 1) 是安全规则。它可以保持不变(看起来不错)。

您的第二条规则 (Joomla 2) 将每个不存在的 file/folder 重写为 /index.php
从此规则中删除以下行

<add input="{URL}" pattern="^/index.php" ignoreCase="true" negate="true" />

最后,您的最后一条规则(www 规则)应如下所示

<rule name="Redirect to WWW" stopProcessing="true">
   <match url="^(.*)$" />
   <conditions>
      <add input="{HTTP_HOST}" pattern="^www\." negate="true" />
   </conditions>
   <action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>

注意:最好将您的 www 规则放在第一位(或者至少放在第二位)