我的CMS中有几个基于子域的网站,如:
a.site.com
b.site.com
所有上传的文件都在/upload
目录下,如:
site.com/upload/2012/a.jpg
但是URL的生成方式如下:“/upload/2012/a.jpg
”。在这种情况下,可以通过a.site.com/upload/2012/a.jpg
网址和b.site.com/upload/2012/a.jpg
网址访问同一图片。
如何配置nginx以将指向/upload
的所有请求重定向到site.com/upload
。例如:
a.site.com/upload/2012/a.jpg => site.com/upload/2012/a.jpg
答案 0 :(得分:2)
将以下内容添加到子域的配置中应该可以解决问题
location /upload/ {
rewrite ^ http://site.com$request_uri permanent;
}
如果您在同一服务器块中捕获site.com和* .site.com,则需要添加额外的if语句:
location /upload/ {
if( $host != site.com ) {
rewrite ^ http://site.com$request_uri permanent;
}
# if we get here it's the main site
# directives for serving http://site.com/upload/ go here
}
答案 1 :(得分:1)
Nginx不会生成网址。它是一个Web服务器。它回答了http://site.com/upload/2012/a.jpg
之类的请求。
因此,您可以将html代码中的相对链接/upload/2012/a.jpg
更改为绝对http://site.com/upload/2012/a.jpg
,而不是更改nginx配置。或者更改子域名的nginx配置,nginx会为http://site.com/upload/2012/a.jpg
和http://a.site.com/upload/2012/a.jpg
以及http://b.site.com/upload/2012/a.jpg
请求发送相同的图片。
如果您更喜欢更改配置,则必须为所有子域创建统一配置。 Because
按名称搜索虚拟服务器时,如果名称与多个指定的变体匹配,例如通配符名称和正则表达式匹配时,将按以下优先顺序
选择第一个匹配的变体
server {
listen 80;
server_name *.site.com;
location ^~ /upload {
root /real/path/to/upload/;
...
}
}