У меня есть следующие 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