奇怪的错误 400 错误请求,参数不太长

问题描述 投票:0回答:1

我遇到一个问题,不太长的 url 参数会导致

Bad Request - Invalid URL. HTTP Error 400. The request URL is invalid.

这是一个抛出错误的示例(param2 的长度为 415 字节):

https://www.example.com/folder/sub/myword&param2=fsadifsdifhsidufhsdiufhieruwhfierfhiurefhierfheriofheriufheriufheriufheriufrehiufherfierhffsaidfsdiufhsdiufshduifsduifsdhfuidssafsdfdsfdsfsdfdsfdsfadsfdsfdsasfsdufsduyfgdsuyfgduysfgdysufgudsfdsufdsfsdfasdfsdiofjdosifjodsifjoisdfjsdoifjdosifjosdifjsdoifjdsoifjodsifjodsifjsdfdsufidshufhiuhiuerfhreuifhreuifhreuifhreuifhreiufhreiufhreifurehfuireihfurefhreifhureifhreuifhreiufhreiufhureifhruiefreuifheruifwheiurfhruie

但是如果我在路径中显式设置

index.php?word=myword&param2=blabla...
,则效果非常好:

https://www.example.com/folder/sub/index.php?word&param2=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)
  • 我在index.php中做了
    var_dump($_GET);
    ,但我仍然收到错误的请求错误
  • 我启用了失败请求跟踪,但日志中没有任何内容
  • 我尝试了
    true
    false
    appendQueryString

我不知道还能做什么。 Web服务器是IIS 8.5,PHP是7.4。有什么帮助或想法吗?预先感谢您。

php redirect iis server
1个回答
0
投票

问题也可能是 HTTP.sys 甚至不让请求通过,您可以在注册表中更改该设置,重新启动后重试。

注册表:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters]
"UrlSegmentMaxLength"=dword:00000400

这将有效地将段长度设置为 1024。

© www.soinside.com 2019 - 2024. All rights reserved.