不久前,我做了一个小的重写规则,将直接访问我网站图片的人重定向到图片页面,
例如,访问 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;
}
}
$1
在rewrite
的替换中用于反向引用 的正则表达式rewrite
,不是 location
的正则表达式。指令中的正则表达式可以在、、 ...location
中捕获。alias
error_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;
}
}
}
您还必须使用反斜杠来转义点。