Назад | Перейти на главную страницу

Включенные правила перезаписи не совпадают

С помощью Apache я пытаюсь настроить правило перезаписи, которое будет включено в несколько виртуальных хостов. Собственно этот файл правил включен в 2 vhost.

Первый виртуальный хост содержит только это правило перезаписи (и оно работает) и действует как обратный прокси для Nginx:

 RewriteEngine On
 Include /etc/apache2/bad-referers

Другой содержит Wordpress с плагином W3 Total Cache с его конфигурацией Apache и WP .htaccess по умолчанию:

    RewriteEngine On

    RewriteCond %{HTTP_HOST} !^domain.tld$
    RewriteRule ^(.*) http://domain.tld/$1 [R=301,L,QSA]

    Include /etc/apache2/bad-referers
    Include /var/www/d/domain.tld/w3tc.conf

Плохие рефери в этом случае никогда не совпадают, в то время как это правило заканчивается [F, L]. Перезапись доменного имени и правила W3 Total Cache работают хорошо. Я действительно не понимаю.

Имеет ли значение порядок или размещение директив Include? Могу ли я поместить содержимое всех этих файлов в директиву vhost? Или RewriteBase?

(Почти) полный vhost через / server-info:

В файле: /etc/apache2/sites-enabled/domain.tld

   1: <VirtualHost *:80>
   7:   <Directory /var/www/d/domain.tld/html/>
  14:     RewriteEngine On
  16:     RewriteCond %{HTTP_HOST} !^domain.tld$
  17:     RewriteRule ^(.*) http://domain.tld/$1 [R=301,L,QSA]

В файле: /etc/apache2/bad-referers

   2:     RewriteEngine on
   5:     RewriteCond %{HTTP_REFERER} 4webmasters\.org [NC,OR]
 104:     RewriteCond %{HTTP_REFERER} youporn-forum\.uni\.me [NC]
 105:     RewriteRule ^.* - [F,L]

В файле: /var/www/d/domain.tld/w3tc.conf

 191:     RewriteEngine On
 192:     RewriteBase /wp-content/cache/minify/
 193:     RewriteRule /w3tc_rewrite_test$ ../../plugins/w3-total-cache/pub/minify.php?w3tc_rewrite_test=1 [L]
 194:     RewriteCond %{HTTP:Accept-Encoding} gzip
 195:     RewriteRule .* - [E=APPEND_EXT:.gzip]
 196:     RewriteCond %{REQUEST_FILENAME}%{ENV:APPEND_EXT} -f
 197:     RewriteRule (.*) $1%{ENV:APPEND_EXT} [L]
 198:     RewriteRule ^(.+/[X]+\.css)$ ../../plugins/w3-total-cache/pub/minify.php?test_file=$1 [L]
 199:     RewriteRule ^(.+\.(css|js))$ ../../plugins/w3-total-cache/pub/minify.php?file=$1 [L]
 207:     RewriteEngine On
 208:     RewriteBase /
 209:     RewriteCond %{HTTP:Accept-Encoding} gzip
 210:     RewriteRule .* - [E=W3TC_ENC:_gzip]
 211:     RewriteCond %{REQUEST_METHOD} !=POST
 212:     RewriteCond %{QUERY_STRING} =""
 213:     RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC]
 214:     RewriteCond %{HTTP_USER_AGENT} !(W3\ Total\ Cache/0\.9\.3) [NC]
 215:     RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index.html%{ENV:W3TC_ENC}" -f
 216:     RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index.html%{ENV:W3TC_ENC}" [L]

In file: `/etc/apache2/sites-enabled/domain.tld`

    :   </Directory>
    : </VirtualHost>

Решено другим методом, SetEnvIf & access deny.

<IfModule mod_setenvif.c>
SetEnvIfNoCase Referer 4webmasters\.org spambot=yes
Order allow,deny
Allow from all
Deny from env=spambot
</IfModule>