Я не уверен, что смогу решить это за один раз, но мы можем идти туда-сюда при необходимости.
Во-первых, я хочу повторить то, что я думаю, что вы говорите, и убедиться, что я ясен. Вы хотите запретить запросы к сервлету1 и сервлету2, если запрос не имеет правильного реферера и у него есть строка запроса? Я не уверен, что понимаю (servlet1 | servlet2) /.+\?.+, потому что похоже, что вам нужен файл под servlet1 и 2. Я думаю, возможно, вы комбинируете PATH_INFO (перед "?") С GET строка запроса (после "?"). Похоже, что часть PATH_INFO будет работать, но тест запроса GET не будет. Я сделал быстрый тест на своем сервере, используя script1.cgi и script2.cgi, и следующие правила сработали, чтобы выполнить то, что вы просите. Очевидно, они немного отредактированы, чтобы соответствовать моей среде:
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]
Выше были перехвачены все неправильные запросы к файлам script1.cgi и script2.cgi, которые пытались отправить данные, используя строку запроса. Однако вы также можете отправлять данные, используя path_info и публикуя данные. Я использовал эту форму для защиты от любого из трех методов, используемых с неправильным реферером:
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]
Основываясь на примере, который вы пытались заставить работать, я думаю, это то, что вы хотите:
RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]
Надеюсь, это хотя бы приблизит вас к цели. Пожалуйста, дайте нам знать, как это работает, меня интересует ваша проблема.
(Кстати, я согласен с тем, что блокировка реферера - это плохая безопасность, но я также понимаю, что иногда релятивность порождает несовершенные и частичные решения, которые, как вам кажется, уже признаются.)