2011-02-01 11 views
7

我有一个我以前从未遇到的问题,我认为它与apache配置有关,我不太熟练。apache:查询字符串(URL)中的变音变音符导致403

首先,有一个带有搜索表单的php脚本。该表单通过POST传输。

然后是搜索结果列表。此处原始搜索查询作为url的一部分传递,例如:search.php?id = 1234 & query = foo。这也适用 - 只要没有元音变音(äöüÄÖÜß...)字符传输。

,只要我在搜索中包括查询,发送查询字符串作为POST工程的第一部分变音符号,但它传递(urlencoded的)的URL导致403

这样:

  • search.php?id=1234&query=bar工作
  • search.php?id=1234&query=b%E4r导致403(%E4 = “A” UTF-8 urlencoded的)
  • search.php?id=1234&query=b%C3%A4r导致403(%C3%A4 = “A” 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不接受正确的urlencoded元音变音的url?

附加信息:我也尝试创建一个名称为变音符号的静态文件,并且/t%C3%A4st.php/täst.php都可以毫无问题地投入使用。 täst.php?foo=täst失败。

注:?foo=%28,其中28%是 “(”,作品也

+0

迂腐,我知道,但“SS”没有变音... – Stephen 2011-02-01 12:53:19

+0

对不起:)这是怎么超的那种-的特殊字符叫什么名字? – stefs 2011-02-01 13:02:28

回答

1

Apache不逃逸的是,浏览器不会

您需要使用urlencodeurldecode,以避免与问题。

一些浏览器,如旧的Netscape,只是将网址写为8位字符。其他人,特别是MSIE,编码的URL为UTF-8将其发送到Web服务器,所以一个8位字符到达为两个字符,其中第一个具有第8位集之前。没有任何迹象表明,在请求标题或其他地方,url是用UTF-8编码的。