You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS10部署Joomla站点出现URL异常跳转问题求助

问题原因分析
  • 核心问题是重写规则执行顺序错误:IIS的URL重写规则按从上到下的顺序执行,当前配置将强制HTTPS规则放在了Joomla的两条规则之后,访问HTTP地址时,会先触发Joomla的SEF重写,将不存在的路径重写到index.php后才执行HTTPS跳转,此时请求URI已经被修改,和Joomla本身的站点配置(比如$live_site参数)叠加后就会出现路径拼接错误,导致跳转目标出现异常的https://w前缀。
  • 次要问题是Joomla的SEF重写规则(Joomla! Rule 2)没有设置stopProcessing="true",重写完成后还会继续向下匹配其他规则,增加异常概率。
  • 补充优化点:强制HTTPS规则的主机头匹配没有加起止锚点,可能出现非预期的partial匹配。
修复方案

调整规则顺序并补充缺失的配置项,修改后的rewrite节点代码如下:

<rewrite>
    <rules>
        <clear />
        <!-- 强制HTTPS规则移到最前面优先执行 -->
        <rule name="Force HTTPS" enabled="true" stopProcessing="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{HTTPS}" pattern="^OFF$" />
                <!-- 主机头匹配增加锚点,可根据实际需求调整匹配规则 -->
                <add input="{HTTP_HOST}" pattern="^(www\.)?website\.com$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true" redirectType="Permanent" />
        </rule>
        <rule name="Joomla! Rule 1" enabled="true" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
                <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>
        <!-- 给Joomla Rule 2增加stopProcessing="true",避免多余规则匹配 -->
        <rule name="Joomla! Rule 2" enabled="true" stopProcessing="true">
            <match url="(.*)" ignoreCase="false" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <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>
   </rules>
</rewrite>
验证注意事项

修改配置后请清除浏览器缓存和IIS缓存,避免301永久重定向缓存影响测试;同时确认Joomla后台configuration.php中的$force_ssl参数、$live_site参数和当前站点域名一致,避免出现双重重定向冲突。

内容的提问来源于stack exchange,提问作者jc1571

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:00