如何实现禁止直接IP访问网站并自动跳转至域名?
禁止直接通过IP访问网站的实现方案
一、前端JavaScript方案(简单但有局限)
你找到的JS代码可以实现基础的提示和跳转,但需要增加IP判断逻辑避免误触发:
// 获取当前访问的主机地址 const currentHost = window.location.hostname; // 匹配IPv4地址的正则 const ipPattern = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; // 判断是否是IP访问 if (ipPattern.test(currentHost)) { alert("Direct IP is not allowed"); // 替换为你的实际域名 window.location.href = "https://your-domain.com"; }
⚠️ 注意:这个方法仅在用户浏览器启用JavaScript时生效,用户可以通过禁用JS绕过,因此只能作为辅助手段,不能单独依赖。
二、后端服务器配置方案(可靠,推荐)
后端拦截是最安全的方式,直接在服务器层面阻止IP访问,无法被用户绕过,以下是主流服务器的配置方法:
1. Nginx 配置
在你的站点配置文件(如/etc/nginx/sites-available/your-site.conf)中添加IP拦截规则:
# 处理IP访问的server块 server { listen 80; listen 443 ssl; server_name 你的服务器IP; # 替换为实际IP # HTTPS证书配置(如果启用HTTPS) ssl_certificate /path/to/your-cert.crt; ssl_certificate_key /path/to/your-cert.key; # 方案1:跳转至域名 return 301 https://your-domain.com$request_uri; # 方案2:直接返回禁止提示 # return 403 "Direct IP is not allowed"; } # 正常的域名站点配置 server { listen 80; listen 443 ssl; server_name your-domain.com www.your-domain.com; # 你的站点根目录、反向代理等其他配置... }
配置完成后重启Nginx:sudo systemctl restart nginx
2. Apache 配置
在站点的.htaccess文件或主配置文件中添加重写规则:
RewriteEngine On # 匹配IP格式的访问地址 RewriteCond %{HTTP_HOST} ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ # 方案1:跳转至域名 RewriteRule ^(.*)$ https://your-domain.com/$1 [R=301,L] # 方案2:返回403禁止访问 # RewriteRule ^(.*)$ - [F,L]
3. PHP 后端判断
如果你的网站基于PHP开发,可在入口文件(如index.php)顶部添加判断逻辑:
$host = $_SERVER['HTTP_HOST']; $ipPattern = '/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/'; if (preg_match($ipPattern, $host)) { header('HTTP/1.1 403 Forbidden'); echo "Direct IP is not allowed"; // 或跳转至域名 // header("Location: https://your-domain.com"); exit; }
总结
优先使用后端服务器配置(Nginx/Apache)实现IP访问拦截,这是最安全可靠的方式;前端JS方案可作为补充,给用户更友好的提示。
内容的提问来源于stack exchange,提问作者Mohamed
相关产品推荐
相关产品推荐

