Нужна помощь в переписывании правила Nginx для поддоменов - PullRequest
4 голосов
/ 19 января 2011

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

, например, для доступа к www.mysite.com/i/asdf.jpg вwww.mysite.com/pic/asdf

это правило переписывания, которое я использовал:

location /i/image_(\d+).(gif|jpg|jpeg|png)$ {
  root /home/mysite/public_html;
  valid_referers www.example.com mysite.com;
  if ($invalid_referer) {
   rewrite ^ http://www.example.com/pic/$1 permanent;
  }
 }

Я создал поддомен каталога 'i', который содержит все изображения.так что теперь это похоже на thsi http://i.mysite.com/

Можно ли сделать перезапись, подобную приведенной выше, чтобы, если к файлу напрямую обращался другой реферер, он попадал в то же правило перезаписи?

THX:)

ОБНОВЛЕНИЕ: теперь с помощью этого:

   server {
 access_log off;

  error_log  logs/vhost-error_log warn;
  listen    80;
  server_name i.imgzzz.com;
    root /home/imgzzz/public_html;
  #location ~ ^/pic/ { alias /home/imgzzz/public_html/i; }
        location ~ ^/pic/(.*)$ { alias /home/imgzzz/public_html/i/$1; }
valid_referers i.imgzzz.com www.imgzzz.com imgzzz.com;
location ~ /image_(\d+).(gif|jpg|jpeg|png)$ {
    if ($invalid_referer) {
        rewrite /image_(\d+).(gif|jpg|jpeg|png)$ /pic/image_$1 last;
    }
}
}

Htaccess переписывает:

RewriteBase /
Options +FollowSymlinks
#RewriteEngine on
rewritecond %{http_host} ^imgzzz.com [nc]
rewriterule ^(.*)$ http://www.imgzzz.com/$1 [r=301,nc] 

RewriteCond %{HTTP_REFERER} !^http://(www\.)?imgzzz.com/.*$ [NC]
RewriteRule i/image_(\d+)\.(jpg|jpeg|gif) pic/$1 [L]

RewriteRule ^pic/([0-9]+)/{0,1}$ view.php?name=$1 [QSA,L]
RewriteRule ^pic/full/([0-9]+)/{0,1}$ view-f.php?name=$1 [QSA,L]
RewriteRule ^pic/([0-9]+)/feature/$ view.php?name=$1&pop=1 [QSA,L]

1 Ответ

1 голос
/ 20 января 2011
valid_referers i.imgzzz.com www.imgzzz.com imgzzz.com;
location ~ /image_(\d+).(gif|jpg|jpeg|png)$ {
    if ($invalid_referer) {
        rewrite /image_(\d+).(gif|jpg|jpeg|png)$ /view.php?name=image_$1.$2 last;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...