Я пытаюсь предотвратить, в этом случае WordPress, переписывание определенных URL-адресов. В этом случае я пытаюсь помешать ему когда-либо обрабатывать запрос в каталоге uploads и вместо этого оставлять его на странице сервера 404. Поэтому я предполагаю, что это просто, как добавление правила:
RewriteCond %{REQUEST_URI} !^/wp-content/uploads/
Это правило должно оцениваться как ложное и заставить цепочку правил терпеть неудачу для этих запросов, тем самым останавливая переписывание. Но нет... Возможно, мне нужно сопоставить обложку полной строки в моем выражении?
RewriteCond %{REQUEST_URI} !^/wp-content/uploads/.*$
Нет, это тоже не так. Поэтому, почесывая голову, я делаю проверку здравомыслия. Возможно, что-то не так с фактическим рисунком. Поэтому я делаю простой тестовый пример.
RewriteCond %{REQUEST_URI} ^/xyz/$
В этом случае переписывание происходит тогда и только тогда, когда запрошенный URL-адрес/xyz/и показывает страницу сервера 404 для любой другой страницы. Это именно то, чего я ожидал. Поэтому я просто вставлю! для отрицания этого шаблона.
RewriteCond %{REQUEST_URI} !^/xyz/$
Теперь я ожидаю увидеть полную противоположность вышеуказанному условию. Переписывание не должно происходить для /xyz/, но для всех других возможных URL-адресов. Вместо этого переписывание происходит для каждого URL-адреса, как /xyz/, так и других.
Итак, либо использование отрицаемых регулярных выражений в RewriteConds нарушено в Apache, либо есть что-то фундаментальное, о котором я не понимаю. Кто из них?
Сервер Apache2.
Файл целиком:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/wp-content/uploads/
RewriteRule . /index.php [L]
</IfModule>
Файл по умолчанию WordPress плюс мое правило.