Итак, после большого раздражения я разобрался в проблеме, вроде. Как оказалось, правило в моем первоначальном вопросе действительно сделало именно то, что и предполагалось. Так же поступил ряд других способов сделать то же самое, например
RewriteRule ^wp-content/uploads/.*$ - [L]
(пометить правило как последнее, если шаблон соответствует) или
RewriteRule ^wp-content/uploads/.*$ - [S=1]
(пропустите следующее правило, если шаблон соответствует), а также отрицательное правило в вопросе, как уже упоминалось. Все эти правила работали просто отлично и возвращали управление Apache без переписывания.
Проблема возникла после обработки этих правил. Вместо этого проблема заключалась в том, что я удалил шаблоны по умолчанию 404.shtml, 403.shtml и т. Д., Предоставленные моим хостом. Если у вас нет .htaccess переписывает, это работает просто отлично; сервер соберет свою собственную страницу 404 по умолчанию, и все работает. (По крайней мере, я так думал, но на самом деле это была двойная ошибка: «Кроме того, при попытке использовать ErrorDocument для обработки запроса была обнаружена ошибка 404 Not Found».)
Если у вас есть .htaccess, с другой стороны, он выполняется во второй раз для страницы 404. Если страница есть, она будет использоваться, но теперь вместо этого запрос на 404.shtml был перехвачен правилом catch-all и переписан в index.php. По этой причине все другие предложения, которые я получил здесь или где-либо еще, потерпели неудачу, потому что в конце страница 404 была переписана в index.php.
Итак, решение было просто восстановить шаблоны ошибок. Оглядываясь назад, было довольно глупо удалять их, но у меня есть этот менталитет «с нуля». Не хочу ничего, казалось бы, ненужного валяться. По крайней мере, теперь я понимаю, что происходит, чего я и хотел.
Наконец, комментарий к Сесилу: я никогда не хотел запрещать доступ к чему-либо, просто остановил переписывание. Не то чтобы сейчас это имело большое значение, но я просто хотел уточнить это.