Функция поиска mod_rewrite, проблема с косой чертой (ошибка 404)

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

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

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

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

Благодарю.

1 ответ

Решение

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

AllowEncodedSlashes on

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

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

RewriteRule ^search/(.*)-([0-9]+).html$ index.php?search=$1&page=$2 [B,L]
Другие вопросы по тегам