У меня есть проблема, с которой я никогда не сталкивался раньше, и я думаю, что это как-то связано с конфигурацией apache, в которой я не очень хорошо разбираюсь.
Во-первых, есть 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 = "ä" utf-8 с кодировкой Urlen)
search.php?id=1234&query=b%C3%A4r
приводит к 403 (% C3% A4 = "ä" utf-8 с кодировкой Urf)
- отправка умлаутов через POST Works
я преобразовал приложение из iso-8859-1 в utf-8, но это не имело значения.
Я также протестировал его на своей локальной машине, здесь он работает безупречно - как и ожидалось.
настройка удаленного сервера (там, где он не работает):
Apache / 2.2.12 (Ubuntu),
Версия PHP 5.2.10-2ubuntu6.7, Suhosin Patch 0.9.7, через CGI / FastCGI
локальная настройка (здесь тоже самое работает):
Apache / 2.2.8 (Win32) PHP / 5.3.5
Версия PHP 5.3.5 через mod_php
Кто-нибудь знает, почему удаленный apache / php-cgi не принимает правильно url-кодированные умлауты в URL?
дополнительная информация: я также пытался создать статический файл с умлаутом в названии, и оба /t%C3%A4st.php
и /täst.php
обслуживаются без проблем. täst.php?foo=täst
не удается.
примечание: ?foo=%28
, где% 28 - "(", также работает.