У меня есть такая конфигурация Apache:
# Image hotlinking rule
RewriteCond %{HTTP_REFERER} ^http://badsite\.com/
RewriteRule .*/static/artwork/.*\.(jpg|png)$ /static/images/hotlink.png [L]
# Redirects
RewriteRule ^static/artwork/(.+)$ http://cdn.mysite.com/artwork/$1 [L,R=301]
# CodeIgniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
Он должен сделать следующее:
badsite.com
, заблокируйте его и вместо этого отобразите изображение хотлинка.Однако я думаю, что первая RewriteCond
применяется к правилу перенаправления, а не к правилу хотлинкинга, потому что запросы изображений от этого реферера перенаправляются в CDN, а не в образ хотлинкинга. An пример в документации Apache (внизу раздела) означает, что разрыв строки останавливается RewriteCond
применяется, но этого не происходит.
Есть ли способ «сбросить» RewriteCond
правило, или в моей конфигурации есть другая ошибка?
Разрывы строк совершенно несущественны; а RewriteCond
относится только к одному RewriteRule
; тот, что прямо под ним.
Было бы полезно предоставить дополнительную информацию о вашей конфигурации, поскольку контекст важен в Apache. Но, судя по тому, что ваш второй RewriteRule
работает, похоже, что эта конфигурация либо установлена в <Directory>
контекст или .htaccess
файл, и это /static
лежит в основе этого контекста.
Учитывая это, вы сначала RewriteRule
никогда не будет совпадать. Измените свой узор ..
.*/static/artwork/.*\.(jpg|png)$
..к ..
^static/artwork/.*\.(jpg|png)$