функция поиска mod_rewrite, проблема с косой чертой (ошибка 404) - PullRequest
1 голос
/ 26 февраля 2011

Я пытаюсь переписать URL страницы результатов поиска во что-то вроде /search/query-1.html, но когда я пытаюсь найти ключевое слово с косой чертой "/" или "#" .. (например, A / D) он возвращает ошибку 404.

Мой .htaccess имеет следующее:

RewriteEngine on
RewriteRule ^search/(.*)-([0-9]+).html$ index.php?search=$1&page=$2 [L]

В чем может быть проблема?

Спасибо.

1 Ответ

2 голосов
/ 06 марта 2011

Если вы хотите, чтобы Apache принимал закодированные слеши, как вы упомянули в комментариях, вам нужно включить его в конфигурации вашего сервера с помощью директивы AllowEncodedSlashes :

AllowEncodedSlashes on

Вероятно, вы сейчас не включили это, и в этом случае стандартное поведение - Apache отклонить запрос с ответом 404. Вы можете указать эту директиву только в контексте сервера или виртуального хоста, поэтому в зависимости от вашей среды вы не сможете ее изменить. Что касается закодированного хеш-символа, у него не должно возникнуть проблем с обработкой этого.

Однако, вероятно , что хеш вставляется в декодированную строку запроса, что может вызвать некоторые проблемы. Если вы обнаружите, что это так, и ваша установка Apache является достаточно новой, вы должны добавить B flag к вашему RewriteRule, чтобы убедиться, что обратная ссылка экранирована надлежащим образом:

RewriteRule ^search/(.*)-([0-9]+).html$ index.php?search=$1&page=$2 [B,L]
...