mod_rewrite запрещает доступ, если параметр равен чему-то - PullRequest
2 голосов
/ 07 июля 2011

У меня есть URL как
mydomain.com?act=somethingbad
mydomain.com?act=somethingworse
и
mydomain.com?act=somethinggood
mydomain.com?act=somethingbetter

Мне нужно запретить плохие действия. Пробовал что-то вроде:

RewriteCond %{QUERY_STRING} act=(.*)
RewriteCond %{QUERY_STRING} act=[^(somethinggood)]
RewriteRule ^(.*) - [F]

Поскольку у меня больше плохих действий, чем хороших, я хочу исключить де хорошие действия из этого правила. Но приведенный выше пример не работает.

1 Ответ

3 голосов
/ 07 июля 2011

Используйте эти правила:

RewriteCond %{QUERY_STRING} (^|&)act=(.*)
RewriteCond %{QUERY_STRING} !(^|&)act=(somethinggood|somethingbetter)(&|$)
RewriteRule ^(.*) - [F]
  1. Параметр act может быть любым где (например, http://example.com/?act=somethinggood и http://example.com/?mode=happy&act=somethinggood и http://example.com/?mode=happy&act=somethinggood&extra=yes будут в порядке)

  2. Если у вас будет пустое значение для параметра act, оно будет отклонено (например, http://example.com/?act= рассматривается как параметр BAD)

  3. На основеПримеры URL, которые вы предоставили, это правило будет применяться ко ВСЕМ URL, которые имеют act параметр в строке запроса.

...