【问题标题】:Need help rewriting an Nginx rule for subdomain需要帮助为子域重写 Nginx 规则
【发布时间】:2014-09-20 21:18:09
【问题描述】:

不久前我做了一点重写规则,将直接访问我网站图片的用户重定向到图片页面,

例如一个人访问 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”的子域。所以现在就像http://i.mysite.com/

是否可以像上面那样进行重写,所以如果文件被不同的引用者直接访问,它将达到相同的重写规则?

谢谢 :)

更新: 现在使用这个:

   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]

【问题讨论】:

    标签: nginx url-rewriting


    【解决方案1】:
    valid_referers i.imgzzz.com www.imgzzz.com imgzzz.com;
    位置 ~ /image_(\d+).(gif|jpg|jpeg|png)$ {
        如果($invalid_referer){
            最后重写 /image_(\d+).(gif|jpg|jpeg|png)$ /view.php?name=image_$1.$2;
        }
    }

    【讨论】:

    • 你好,k让我稍微解释一下,一个图片直接链接可以通过两种方式访问​​。 www.mysite.com/i/aabc.jpg 和 i.mysite.com/aabc.jpg 。现在如果用户直接访问,第一种方式被重写到图像页面。但是,如果通过子域运行,那么如果通过子域访问图像,这不是我试图让用户重定向到页面的方法。对不起,我的英语不好,我希望我让你明白我的意思。
    • 所以 www.mysite.com 需要重定向,但 i.mysite.com 子域不需要,对吗?
    • k 让我澄清更多,检查一下。 imgzzz.com/i/image_1295618489.jpg 如果您运行此 jpg 链接,它将在页面内打开,而不是直接图像链接。但是如果你从子域(同一文件夹)i.imgzzz.com/image_1295618489.jpg 运行这个 jpg 链接,它会直接打开,这就是我试图避免的,我希望它做和第一个一样的事情。
    • i.imgzzz.com 是否在 nginx 配置中声明为单独的“服务器”?如果是这样,请在此处使用引用条件重复重写并添加无条件的 /pic/ 位置
    • 是的,它被声明为一个单独的服务器,不确定无条件的位置,请查看推文
    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2013-02-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多