У меня есть веб-сайт, на котором 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.