我在 Linux 环境中运行 nginx 服务器,它正在处理域www.example1.com
和www.example2.com
。每个域都有自己的站点地图,因此我需要为每个域加载正确的站点地图,就像它在根目录中一样,例如:
www.example1.com/sitemap.xml
实际上是从www.example1.com/sitemaps/1/sitemap.xml
和:
www.example2.com/sitemap.xml
实际上是从www.example2.com/sitemaps/2/sitemap.xml
为了实现这一点,我尝试为每个域分配一个值,并根据变量值重写它,如下所示:
在 nginx.conf 中:
map $http_host $domain {
www.example1.com 1;
www.example2.com 2;
}
在 sitemap.conf 中:
if($domain=1){
rewrite sitemaps/1/sitemap(.*)$ /sitemap last;
}
if($domain=2){
rewrite sitemaps/2/sitemap(.*)$ /sitemap last;
}
但由于某种原因,此配置返回 404。
有什么建议吗?
答案1
我没有看到你的完整配置,也不知道你如何以及在哪里包含该sitemap.conf
文件,但我宁愿用完全不同的方式来做。使用你现有的map
块,它看起来像
location = /sitemap.xml {
# use '$domain' variable as a part of the full path to 'sitemap.xml' file
root /var/www/domain/sitemaps/$domain; # no trailing slash here!
}
甚至可以/sitemaps/N/
使用map
类似指令获取文件夹的完整路径
map $http_host $sitemap_path {
www.example1.com /var/www/example1.com/sitemaps/1;
www.example2.com /var/www/example1.com/sitemaps/2;
}
和
location = /sitemap.xml {
# use '$sitemap_path' variable as the full path to 'sitemap.xml' file
root $sitemap_path; # no trailing slash here!
}
如果你仍然想使用该rewrite
指令执行此任务,则说明你使用方法不正确。你可以尝试以下方法:
if ($domain=1) {
rewrite ^/sitemap\.xml$ /sitemaps/1/sitemap.xml last;
}
if ($domain=2) {
rewrite ^/sitemap\.xml$ /sitemaps/2/sitemap.xml last;
}
甚至更加优化:
if ($domain) {
rewrite ^/sitemap\.xml$ /sitemaps/$domain/sitemap.xml last;
}