【问题标题】:Too Many Redirects, intermittent issue - suspect Rewrite Cache重定向过多,间歇性问题 - 怀疑重写缓存
【发布时间】:2017-01-15 13:43:33
【问题描述】:

环境 Windows Server 2012 R2 64 位 IIS 8 Plesk 12.5

运行 WordPress 的网站会间歇性地响应太多重定向,但仅针对特定 URL 且仅持续大约 30 分钟。之后,请求的页面按预期提供。在此期间,网站的其余部分使用相同的重写规则正确响应。

特别是一个 URL 比其他 URL 受到的影响更大。可能需要注意的是,它出现在网站主页上,并且正在通过社交渠道推送。

失败的请求跟踪显示特定 URL 的以下内容:

URL_REWRITE_START RequestURL /category/referendum-2/

REDIRECT_FROM_CACHE_ACTION CachedRedirectedURL http://www.website.com/category/referendum-2/ RedirectType Permanent

URL_REWRITE_END 请求URL http://www.website.com/category/referendum-2/

这显然是无限重定向循环的开始。

当正确提供 URL 时,失败的请求跟踪显示:

URL_REWRITE_END 请求URL /index.php

这对于 WordPress 显然是正确的,/index.php 处理所有前端页面请求。

如果查询字符串被添加到请求的 URL,例如。 /category/referendum-2/?key=value IIS 正确地为请求的页面提供服务。因此,我怀疑查询字符串会导致 IIS 跳过重写缓存,这意味着缓存会导致重定向循环。

我在https://blogs.msdn.microsoft.com/danielvl/2010/01/07/registry-values-for-iis-url-rewrite/ 看到了详细说明如何通过注册表禁用重写缓存的帖子,但注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Rewrite 不存在。我并不热衷于创建密钥以查看生产环境中发生的情况。

任何人都可以建议我的怀疑是否正确。导致重定向循环的重写缓存是否正确?

如果是这样,我该如何着手解决问题?我正在努力寻找有关重定向缓存或可能导致此类行为的任何详细信息。

谢谢

【问题讨论】:

    标签: iis iis-8 url-rewrite-module


    【解决方案1】:

    问题已通过向重定向规则添加一个条件来解决,该条件负责使用无法缓存的参数调用无限重定向循环,从而避开缓存。

    <rule name="Imported Rule 2" stopProcessing="true">
    	<match url=".*" ignoreCase="false" />
    	<conditions logicalGrouping="MatchAll">
    		<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="Imported Rule 2" stopProcessing="true">
    	<match url=".*" ignoreCase="false" />
    	<conditions logicalGrouping="MatchAll">
    		<add input="{REMOTE_PORT}" pattern=".*" />
    		<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>

    更好的解决方案可能是更新 applicationHost.config 中的frequentHitThreshold 和frequentHitTimePeriod。详情见http://www.ckode.dk/server-configuration/tuning-iis-7-for-static-content/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-07
      • 2012-12-27
      • 2021-08-14
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      相关资源
      最近更新 更多