mod_rewrite不支持黑名单跳转,需用rewritecond+rewriterule+[r]实现:匹配恶意域名、路径或referer时重定向至警告页等,避免循环并加[l]终止规则。

Apache 的 mod_rewrite 本身不直接支持“黑名单跳转”——[F]标志返回 403,[R]标志做重定向,二者逻辑不同。所谓“黑名单跳转”,实际是指:当请求匹配黑名单条件(如恶意域名、扫描路径、非法 Referer)时,不返回 403,而是重定向到指定页面(如警告页、首页或监控地址)。这需要组合使用 RewriteCond + RewriteRule + [R] 标志,并注意避免循环和误匹配。
用 [R] 实现匹配即跳转,不是拒绝
与 [F] 立即返回 403 不同,[R] 会发起 HTTP 302(或加 [R=301] 指定永久跳转)响应,浏览器地址栏会变化。适用于需引导用户离开、记录行为或展示提示的场景。
-
RewriteRule ^ - [R=https://example.com/blocked.html]:跳转到外部 URL(需完整协议+域名) -
RewriteRule ^ /blocked.html [R,L]:跳转到站内路径(相对路径,自动补全当前域名) - 务必加
[L]终止后续规则,防止被其他重写覆盖
按 Host 头跳转黑名单域名
防止恶意域名解析到你的 IP,不封禁而改跳警告页,更友好且可留痕。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 匹配完整 Host 字符串,大小写不敏感:
RewriteCond %{HTTP_HOST} ^(malware\.example\.com|phishing\.net)$ [NC] - 跳转到统一提示页:
RewriteRule ^ /notice/blacklisted.html [R=302,L] - 若需记录日志,可在跳转前加
[E=BLACKLISTED:1]设置环境变量,再用LogFormat记录
按请求路径跳转扫描器特征
拦截常见攻击路径(如 /wp-config.php、/.git/),不返回 404 或 403,而是跳转到监控页或空页面,降低攻击者信息获取。
- 匹配 URI 中的敏感关键词:
RewriteCond %{REQUEST_URI} \.(git|env|bak|swp)$ [NC,OR] - 继续匹配路径关键字:
RewriteCond %{REQUEST_URI} (phpmyadmin|wp-config\.php|shell\.php) [NC] - 统一跳转并终止:
RewriteRule ^ /monitor/scan-detected [R=302,L] - 建议放行
/robots.txt和/favicon.ico,避免干扰爬虫和浏览器渲染
按 Referer 跳转非授权来源
限制某些后台或资源路径只能从指定域名跳入,否则跳转到登录页或说明页。
- 允许空 Referer(直接输入地址)和白名单:
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?mydomain\.com [NC] - 同时排除空 Referer:
RewriteCond %{HTTP_REFERER} !^$ - 仅对特定路径生效:
RewriteRule ^admin/ /login?from=blocked [R=302,L] - 注意:Referer 可被伪造,仅作辅助控制,不能替代权限验证










