Azure Windows App Service中WordPress出现Request.Path含冒号的危险请求日志求助
解决Azure Windows App Service中WordPress的Request.Path冒号错误问题
这个问题我之前帮客户处理过类似的,针对Azure Windows App Service这种PaaS环境,你不用直接操作IIS服务器,通过配置文件或者门户设置就能解决,给你几个可行的方案:
方案一:通过web.config修改IIS请求验证规则
Azure App Service允许通过站点根目录的web.config文件配置IIS行为,我们可以直接修改规则来允许URL中的冒号,同时关闭不必要的验证:
- 登录Azure门户,找到你的目标App Service,进入高级工具(Kudu),或者用FTP/本地代码编辑器打开站点根目录的
web.config文件。 - 在
<system.webServer>节点下添加或修改requestFiltering配置:
<system.webServer> <!-- 保留原有其他配置 --> <security> <requestFiltering allowDoubleEscaping="true"> <requestLimits /> <fileExtensions allowUnlisted="true" /> <verbs allowUnlisted="true" /> </requestFiltering> </security> </system.webServer>
- 在
<system.web>节点下更新请求无效字符的规则,把冒号(:)从禁止列表中移除:
<system.web> <!-- 保留原有其他配置 --> <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="<,>,*,%,&,\,?" /> </system.web>
这样设置后,IIS就不会再把URL中的冒号判定为危险字符,自然也就不会触发那条错误日志了。
方案二:用URL重写规则拦截无效请求
既然你发现触发错误的都是那种错误拼接的URL(比如https://www.mywebsite.com/my-category/my-article/https:/www.mywebsite.com/my-page/),我们可以直接用URL重写规则拦截这类请求,避免它们触发验证错误:
在web.config的<system.webServer>节点下添加以下重写规则:
<system.webServer> <!-- 保留原有其他配置 --> <rewrite> <rules> <rule name="Block Malformed URLs" stopProcessing="true"> <match url=".*https:/.*" /> <!-- 匹配包含错误拼接的"https:/"片段的URL --> <action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="Invalid Request URL" /> </rule> </rules> </rewrite> </system.webServer>
这个规则会直接拦截这类明显异常的请求,返回404,同时不会在日志里留下那条烦人的错误信息。
方案三:排查WordPress插件/主题的潜在问题
虽然你说站内没有相关跳转链接,但有些WordPress插件(比如SEO、缓存类插件)可能在生成URL时存在bug,偶尔会生成这种错误链接。你可以:
- 暂时禁用所有第三方插件,观察2-3天日志,看错误是否消失
- 如果错误消失,再逐个启用插件,定位到有问题的插件并更新或替换它
- 同样可以切换到默认主题(比如Twenty Twenty-Four),排查主题是否存在URL生成的问题
注意事项
修改web.config之前,一定要先备份一份原文件,避免配置错误导致站点无法访问。如果修改后出现问题,可以通过Kudu工具的Debug console恢复备份的配置文件。
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

