Проблемы с 403 запрещены на URL - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь 403-блокировать URL (/wp-admin/admin-ajax.php?action=force_refresh_get_site_version), используя mod_rewrite. Это файл .htaccess:

RewriteEngine on
RewriteCond %{QUERY_STRING} \baction=force_refresh_get_site_version\b [NC]
RewriteRule ^ - [F,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

... однако это дает мне 404.

Но если я уберу эти две строки:

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f

... Я получил 403 запрета. Несколько сбивает с толку. Спасибо за любую помощь, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 25 ноября 2018

Несколько сбивает с толку.

Да, это не имеет смысла! Казалось бы, что-то еще происходит?

Директива, которую вы опубликовали, заблокирует указанный URL-адрес - фактически, он может заблокировать слишком много, поскольку вы не проверяете URL-путь. Чтобы заблокировать этот определенный URL, вы должны использовать что-то вроде следующего:

RewriteCond %{QUERY_STRING} ^action=force_refresh_get_site_version$
RewriteRule ^wp-admin/admin-ajax.php$ - [F]

Флаг L является излишним, подразумевается при использовании флага F.

Одной из возможных причин статуса ответа 404 является то, что ваш пользовательский 403 (определенный в .htaccess или конфигурации вашего сервера) переопределяет код состояния и явно устанавливает 404. (Это не так уж редко на некоторых общих серверах.) Однако это не похоже на то, что вы видите ниже ...

Но если я уберу эти две строки:

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f

Эти две строки, по-видимому, не имеют отношения к проблеме, поскольку предыдущая директива уже должна была заблокировать запрос.

Первый RewriteRule - это просто «оптимизация», которая предотвращает ненужную проверку файловой системы при вызове фронт-контроллера (по последней директиве RewriteRule).

Если вы удалите первую директиву RewriteCond, это будет означать, что этот запрос (запрос, который вы пытаетесь заблокировать) в противном случае обрабатывался бы фронт-контроллером WordPress (если бы не предыдущие директивы, которые должны блокировать запрос). Это, скорее всего, приведет к 404, а не к 403. Это также приведет к разрыву всех ссылок на ресурсы статуса (CSS, JS, изображения и т. Д.), Так что ваш сайт вряд ли будет работать должным образом?!

Проверить наличие других файлов .htaccess по пути файловой системы, поскольку они могли бы создать конфликт?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...