修改 nginx 中子域名的重写规则

修改 nginx 中子域名的重写规则

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

例如,访问 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.mysite.com mysite.com;
  if ($invalid_referer) {
   rewrite ^ http://www.mysite.com/pic/$1 permanent;
  }
 }

我创建了目录“i”的子域,其中包含所有图像。所以现在就像这样http://i.mysite.com/

是否可以进行像上面那样的重写,这样如果文件通过子域直接被不同的引用者访问,它是否会符合相同的重写规则?

我在子域服务器{...}中尝试过这个:

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

但目前还没有运气 :( 谢谢 :)

答案1

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

$1rewrite的替换中用于反向引用 的正则表达式rewrite不是 location的正则表达式。指令中的正则表达式可以在、、 ...location中捕获。aliaserror_page

请尝试以下操作:

server {
        server_name i.mysite.com;

        access_log /var/log/nginx/i.access_log main;
        error_log /var/log/nginx/i.error_log info;

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

您还必须使用反斜杠来转义点。

相关内容