Назад | Перейти на главную страницу

Как я могу заменить апостроф в URL-адресе с помощью htaccess?

У меня есть веб-сайт с окном поиска. Поисковый запрос передается на страницу поиска как часть $ _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-адресе, - это не апостроф, а фигурная одинарная кавычка ... которая ускользает от вашего регулярного выражения?