У меня есть веб-сайт с окном поиска. Поисковый запрос передается на страницу поиска как часть $ _GET (я использую PHP, но думаю, что это не имеет отношения к моей проблеме), поэтому мой окончательный URL-адрес будет примерно таким: www.example.com/ search.php? searchterm = смит. Однако я обнаружил, что если в поисковый запрос включен апостроф (например, www.example.com/search.php?searchterm=o'hagen), сервер возвращает ошибку 406. Я подумал, что смогу уловить это в файле htaccess и переписать что-нибудь пригодное для использования, но пока не смог. Я пробовал это пока:
RewriteRule ^([^/]*)'([^/]*)$ $1\'$2 [N,E=redirect:1]
и
RewriteRule ^([^/]*)'([^/]*)$ $1%27$2 [N,E=redirect:1]
Ни то, ни другое не помогло мне. Может ли кто-нибудь подсказать, что я могу использовать вместо этого?
РЕДАКТИРОВАТЬ: На данный момент я изменил форму поиска на POST и обработал это в коде, но мне все еще любопытно, как я могу заставить apache принимать поисковый запрос в строке запроса GET.
Почему бы вместо этого просто не использовать POST? Если вам действительно нужен поисковый запрос в вашем URL-адресе, вы можете отправить его в промежуточный скрипт, urlencode его, а затем прозрачно перенаправить браузер:
Сформировать сообщения в "s.php":
<?php if (isset($_POST['search'])) { $s = urlencode($_POST['search']); header("Location: /search.php?searchterm=$s"); ?>
Перенаправление переходит к вашему скрипту search.php с "безопасной" закодированной строкой.
Возможно, то, что вы получаете в URL-адресе, - это не апостроф, а фигурная одинарная кавычка ... которая ускользает от вашего регулярного выражения?