Чистые URL-адреса с помощью mod rewrite и символов URL Encoded вызывают ошибку 404?

Чистые URL-адреса с помощью mod rewrite и символов URL Encoded вызывают ошибку 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-encoded /), сервер, похоже, принудительно выдает ошибку 404. Например, http://example.com/category/articleэто была бы обычная статья, но затем http://example.com/category%2farticleвыдается сгенерированная сервером страница 404. (не пользовательская страница 404)

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

решение1

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

В языке апачи,AllowEncodedSlashes Onпредотвратит немедленное отклонение запроса с кодом 404.

Связанный контент