我遇到一个问题,不太长的 url 参数会导致
Bad Request - Invalid URL. HTTP Error 400. The request URL is invalid.
这是一个抛出错误的示例(param2 的长度为 415 字节):
https://www.example.com/folder/sub/myword¶m2=fsadifsdifhsidufhsdiufhieruwhfierfhiurefhierfheriofheriufheriufheriufheriufrehiufherfierhffsaidfsdiufhsdiufshduifsduifsdhfuidssafsdfdsfdsfsdfdsfdsfadsfdsfdsasfsdufsduyfgdsuyfgduysfgdysufgudsfdsufdsfsdfasdfsdiofjdosifjodsifjoisdfjsdoifjdosifjosdifjsdoifjdsoifjodsifjodsifjsdfdsufidshufhiuhiuerfhreuifhreuifhreuifhreuifhreiufhreiufhreifurehfuireihfurefhreifhureifhreuifhreiufhreiufhureifhruiefreuifheruifwheiurfhruie
但是如果我在路径中显式设置
index.php?word=myword¶m2=blabla...
,则效果非常好:
https://www.example.com/folder/sub/index.php?word¶m2=fsadifsdifhsidufhsdiufhieruwhfierfhiurefhierfheriofheriufheriufheriufheriufrehiufherfierhffsaidfsdiufhsdiufshduifsduifsdhfuidssafsdfdsfdsfsdfdsfdsfadsfdsfdsasfsdufsduyfgdsuyfgduysfgdysufgudsfdsufdsfsdfasdfsdiofjdosifjodsifjoisdfjsdoifjdosifjosdifjsdoifjdsoifjodsifjodsifjsdfdsufidshufhiuhiuerfhreuifhreuifhreuifhreuifhreiufhreiufhreifurehfuireihfurefhreifhureifhreuifhreiufhreiufhureifhruiefreuifheruifwheiurfhruie
这是重定向的 web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Friendly">
<match url="^(.+)$" ignoreCase="true" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php?word={R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
现在,如果
param2
更短,最多246个字节,或者总共252个字节(加上第一个参数的长度),则完全没有问题,这看起来很奇怪。截图:
我检查过但没有帮助的事情:
Maximum URL length
和 Maximum query string
在 IIS 请求过滤中都设置为 32768 字节 (32KB)var_dump($_GET);
,但我仍然收到错误的请求错误true
和 false
appendQueryString
我不知道还能做什么。 Web服务器是IIS 8.5,PHP是7.4。有什么帮助或想法吗?预先感谢您。
问题也可能是 HTTP.sys 甚至不让请求通过,您可以在注册表中更改该设置,重新启动后重试。
注册表:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters]
"UrlSegmentMaxLength"=dword:00000400
这将有效地将段长度设置为 1024。