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

Очистить URL-адреса с перезаписью мода и URL-кодированными символами вызывает 404?

У меня есть веб-сайт, на котором mod_rewrite чтобы получить чистые URL-адреса и настраиваемые страницы 404. Мой .htaccess файл выглядит так:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?clean_url=$1 [QSA,L]
</IfModule>

Меня озадачивает то, что если URL-адрес содержит %2F (в кодировке URL /) сервер, похоже, выдает ошибку 404. Например, http://example.com/category/article была бы нормальная статья, но тогда http://example.com/category%2farticle дает сгенерированную сервером страницу 404. (не пользовательская страница 404)

Я бы не ожидал этого ... почему это происходит? Есть ли способ обойти это?

URL-адреса http://example.com/category/article и http://example.com/category%2farticle не равны. В соответствии с RFC 2616 §3.2.3, зарезервированные символы имеют особое значение (в конце концов, весь смысл экранирования URL). RFC 2396 §2.2 списки / как такой сдержанный персонаж. В контексте URL-адресов HTTP / разграничивает элементы пути, а %2f это буквальная косая черта.

В Apache, AllowEncodedSlashes On предотвратит немедленное отклонение запроса с помощью 404.