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

Apache RewriteRule и косая черта (% 2F)

У меня есть следующие RewriteRule:

RewriteRule ^like/(.+)$ ask.php/$1

Что отлично работает для таких запросов, как:

/like/someting+here/something+else

Но для запросов, в которых одна из частей пути содержит экранированную косую черту (%2F), сервер выдает ошибку 404 Not Found:

/like/one%2Ftwo+things/

Есть ли способ исправить это? Я пробовал оба [B] и [NE] флаги (отдельно и вместе), но ничего не работало.

Редактировать: Я также пробовал:

RewriteRule ^like/ ask.php
# or
RewriteRule ^like/(.*) ask.php

Так что это не обязательно должно совпадать с косой чертой. Это все еще не работает.

Я нашел ответ здесь Вот. Процитируем соответствующие биты:

В строке запроса разрешено использовать голый «% 2f». но не в URL. Чтобы он был действительным, он должен быть закодирован как% 252f, что, я думаю, вы обнаружите, что оно работает так, как вы ожидаете.

Поскольку URL сам по себе недействителен, сервер отклоняет его до того, как будут вызваны какие-либо модули apache.

Для получения дополнительной информации см. RFC2396 - универсальные идентификаторы ресурсов (URI): общий синтаксис.

Директива Apache мне помогла

AllowEncodedSlashes On