【发布时间】:2011-06-19 06:23:11
【问题描述】:
我有一个我以前从未遇到过的问题,我认为这与我不太熟悉的 apache 配置有关。
首先,有一个带有搜索表单的 php 脚本。表单通过 POST 传输。
然后是搜索命中的结果列表。这里原始搜索查询作为 url 的一部分传递,例如:search.php?id=1234&query=foo。这也有效 - 只要没有传输元音变音 (äöüÄÖÜß...) 字符。
只要我在搜索查询中包含变音符号,第一部分将查询字符串作为 POST 传输,但在 URL 中传递它(urlencoded)会导致 403。
所以:
-
search.php?id=1234&query=bar工作 -
search.php?id=1234&query=b%E4r导致 403 (%E4 = "ä" utf-8 urlencoded) -
search.php?id=1234&query=b%C3%A4r导致 403 (%C3%A4 = "ä" utf-8 urlencoded) - 通过 POST 作品提交变音符号
我将应用程序从 iso-8859-1 转换为 utf-8,但这没有任何区别。
我还在我的本地机器上对其进行了测试,在这里它可以完美运行 - 正如预期的那样。
远程服务器设置(不起作用):
Apache/2.2.12 (Ubuntu),
PHP 版本 5.2.10-2ubuntu6.7,Suhosin 补丁 0.9.7,通过 CGI/FastCGI
本地设置(此处相同):
Apache/2.2.8 (Win32) PHP/5.3.5
PHP 版本 5.3.5 通过 mod_php
有人知道为什么远程 apache/php-cgi 不接受 url 中正确的 urlencoded umlauts 吗?
附加信息:我还尝试创建一个名称中带有变音符号的静态文件,/t%C3%A4st.php 和 /täst.php 都可以正常使用。 täst.php?foo=täst 失败。
注意:?foo=%28,其中 %28 是“(”,也可以。
【问题讨论】:
-
迂腐,我知道,但“ß”没有变音符号...
-
对不起 :) 这种特殊字符的超集是怎么命名的?
-
你有没有一些规则被破坏的类似 mod_security 的模块?像 àéù 这样的非 ascii 字符也会发生这种情况吗?
-
àáéèùú 也不起作用。 ascii 字符有效,非 ascii 无效。
-
@user576875:抱歉,我无法回答有关 mod_security 的问题。 phpinfo 说安装了 suoshin 和 ioncube loader。我无权访问任何配置指令。
标签: php apache configuration internationalization