我有一个以前从未遇到过的问题,我认为它与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)我将应用程序从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不能在网址中正确接受urlencoded的变音符号?
其他信息:我还尝试创建一个带有变音符号名称的静态文件,/t%C3%A4st.php
和/täst.php
都可以正常使用。 täst.php?foo=täst
失败。
注意:?foo=%28
,其中%28为“(”,也适用。