Как отфильтровать все URL Apache, содержащие строку, но не содержащие подстроку - PullRequest
1 голос
/ 16 февраля 2012

Я пытаюсь отфильтровать всех клиентов (используя .htaccess), которые пытаются получить доступ к адресам, содержащим, например, path=\ в URL, но не к тем URL, которые содержат _wpnonce=1234567890.

Логика такова: блокируйте всех, кроме тех, у кого также есть _wpnonce параметр.

Блокировка без проверки на наличие подстроки выглядит следующим образом:

RewriteCond %{QUERY_STRING} (menu|mod|path|tag)\=\.?/? [NC,OR]

Есть ли способ включить туда отрицание моей подстроки?

1 Ответ

0 голосов
/ 16 февраля 2012

Документация гласит, что шаблон является регулярным выражением, совместимым с Perl, поэтому вы должны иметь возможность использовать отрицательное прогнозное утверждение:

RewriteCond %{QUERY_STRING} ^(?!.*_wpnonce=1234567890).*(menu|mod|path|tag)\=\.?/? [NC,OR]

, хотя было бы яснее поместить его в отдельный RewriteCond, при условии, что вы можете заставить все [OR] сработать.Если бы не [OR] s, вы могли бы просто написать:

RewriteCond %{QUERY_STRING} !_wpnonce=1234567890 [NC]
RewriteCond %{QUERY_STRING} (menu|mod|path|tag)\=\.?/? [NC]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...