【发布时间】:2018-08-16 03:32:28
【问题描述】:
我想在 URL 中编码一个长的 Base64 编码字符串。
当前在 mod-rewrite 下重写的长 URL(超过 300 个字符)会导致禁止 (402) 错误。
如果我的请求 URL 是 355 个字符,则会导致错误,但是当我将其减少到 300 时,它会起作用。
服务器中是否有限制请求行大小的默认值?
我在服务器配置的任何地方都找不到 LimitRequestLine/FieldSize 指令。
这是我的重写规则:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^json/ base64json.php [L]
一个 URL 看起来像这样:
http://sub.mydomain.com/json/longrandomnumbers?param=xxx
我希望从重写的 url 中提取随机数和参数,但它说禁止权限被拒绝,在 apache2 错误日志中,它说: 周一21年3月19日:03:31.711559 2018] [核心:错误] [PID 20504](36)文件名过长:客户167.220.24.128:45071] AH00036:进入/ JSON / eyJldmVudHMiOlt7InNlc3Npb25JZCI6InMxNTAxMjY0OTIzeDYyZjg4MTNlNjkzMWM5eDU4MjQ0MjY2IiwiaW5zdGFudGlhdGlvbiI6IjkxMTMwMDQ3MTQ3OTE1ODgiLCJpbmRleCI6MCwiY2xpZW50VGltZXN0YW1wIjoxNTIwMzg3NTkwLjE2OSwibmFtZSI6ImNyZWF0aXZlTG9hZGVkIiwidmlld2FiaWxpdHkwME1lYXN1cmFibGUiOnRydWUsInZpZXdhYmlsaXR5NTAxTWVhc3VyYWJsZSI6ZmFsc2V9XX0 =失败(文件系统路径“/无功/网络/曲目/ JSON / eyJldmVudHMiOlt7InNlc3Npb25JZCI6InMxNTAxMjY0OTIzeDYyZjg4MTNlNjkzMWM5eDU4MjQ0MjY2IiwiaW5zdGFudGlhdGlvbiI6IjkxMTMwMDQ3MTQ3OTE1ODgiLCJpbmRleCI6MCwiY2xpZW50VGltZXN0YW1wIjoxNTIwMzg3NTkwLjE2OSwibmFtZSI6ImNyZWF0aXZlTG9hZGVkIiwidmlld2FiaWxpdHkwME1lYXN1cmFibGUiOnRydWUsInZpZXdhYmlsaXR5NTAxTWVhc3VyYWJsZSI6ZmFsc2V9XX0 =') 和 失败(文件系统路径
'/无功/网络/曲目/ JSON / eyJldmVudHMiOlt7InNlc3Npb25JZCI6InMxNTAxMjY0OTIzeDYyZjg4MTNlNjkzMWM5eDU4MjQ0MjY2IiwiaW5zdGFudGlhdGlvbiI6IjkxMTMwMDQ3MTQ3OTE1ODgiLCJpbmRleCI6MCwiY2xpZW50VGltZXN0YW1wIjoxNTIwMzg3NTkwLjE2OSwibmFtZSI6ImNyZWF0aXZlTG9hZGVkIiwidmlld2FiaWxpdHkwME1lYXN1cmFibGUiOnRydWUsInZpZXdhYmlsaXR5NTAxTWVhc3VyYWJsZSI6ZmFsc2V9XX0 =') P>
我尝试将 RequestLine/FieldSize 添加到 apache2.conf,没有用,想知道如何绕过我使用的文件系统的限制,以及为什么在重定向到正确的路径(即 base64json)之前以某种方式检查长度如此烦人.php,我可以把它作为一个长参数来代替吗?可能是ubuntu文件系统造成的。
我在 Ubuntu 14.02 上使用 Apache2.4.7。
【问题讨论】:
-
我刚刚通过重写规则在 Debian 8.3 上的 Apache 2.4.10 上尝试了一个包含 1092 个字符长的参数(几乎是默认配置)的 url,我的参数很好。跨度>
-
尝试不使用重写规则,只传递一个长字符串作为参数。 foo.php?bar=bazbazbaz...,它还会倒下吗?
-
我需要将我的参数长度推到超过 4000 个字符,此时我被禁止了。如果我走得更高,我会从 apache 收到 Request uri too long 错误。这是通过 docker 在底层 ext4 文件系统上实现的。
-
你是对的,谢谢。我用 mydomain/base64json.php?longercharactersandparameters 拉它,它确实接受它,所以我的重写规则有什么问题,请参阅上面的规则。
-
如前所述,我可以使用该规则(在 .htaccess 中),它最多可以处理大约 4000 个带有简单字符串的字符。