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.*(<|%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
相关产品推荐
相关产品推荐

