多域名场景下基于站点地图文件名的.htaccess规则问询
解决方案:用.htaccess阻止跨域名访问站点地图并校验文件名域名
完全可以通过Apache的.htaccess规则实现这个需求——既阻止跨域名访问不属于当前站点的sitemap文件,又能校验文件名中指定的域名是否与访问的主机名匹配。
核心思路
我们需要对比用户访问的域名(HTTP_HOST)和sitemap文件名中包含的域名:如果两者不匹配,就返回禁止访问的状态码(比如403 Forbidden)。
具体的.htaccess规则
将以下代码添加到你的.htaccess文件中(放在网站根目录下):
RewriteEngine On # 1. 捕获sitemap文件名中的完整域名(比如www.seconddomain.com) RewriteCond %{REQUEST_URI} ^/sitemap/(www\.[a-z0-9-]+\.[a-z]+)\.xml$ [NC] # 2. 检查当前访问的域名是否与捕获的域名不匹配 RewriteCond %{HTTP_HOST} !^%1$ [NC] # 3. 不匹配则返回403禁止访问 RewriteRule ^ - [F,L]
规则详解
RewriteEngine On:开启URL重写功能(确保你的Apache服务器已启用mod_rewrite模块)。- 第一条
RewriteCond:匹配请求的URI是否为sitemap/目录下的目标XML文件,并捕获文件名中的完整域名(比如www.seconddomain.com)。[NC]表示不区分大小写,兼容可能的域名大小写差异。 - 第二条
RewriteCond:判断当前访问的域名(HTTP_HOST)是否与捕获的域名不匹配。!^%1$中的%1指代第一条规则捕获的域名。 RewriteRule ^ - [F,L]:如果上述条件满足,返回403 Forbidden([F]标记),并停止后续规则执行([L]标记)。
可选调整
如果你希望返回404 Not Found而非403,只需把[F,L]改成[R=404,L]即可:
RewriteRule ^ - [R=404,L]
测试验证
你可以用curl命令快速测试规则是否生效:
- 访问跨域名的sitemap:
curl -I http://www.firstdomain.com/sitemap/www.seconddomain.com.xml,应该返回403 Forbidden(或404)。 - 访问自身域名的sitemap:
curl -I http://www.firstdomain.com/sitemap/www.firstdomain.com.xml,应该返回200 OK。
内容的提问来源于stack exchange,提问作者Florent
相关产品推荐
相关产品推荐

