Mac系统下无需搭建本地DNS服务器实现域名转发的方法
Mac系统下无需搭建本地DNS服务器实现域名转发的方法
嗨,刚好我之前折腾过类似的需求,完全不用费劲搭建本地DNS服务器,靠修改系统自带的配置文件加简单的服务就能实现foo.com自动跳转到bar.com,给你分享两种实用的方法:
方法一:利用Mac自带的Apache实现重定向
这是比较稳定的方案,因为Apache是系统预装的,不用额外安装软件:
第一步:把foo.com解析到本地
打开终端,输入以下命令编辑hosts文件(需要管理员权限):sudo nano /etc/hosts在文件末尾添加一行:
127.0.0.1 foo.com按
Ctrl+O保存修改,回车确认文件名,再按Ctrl+X退出编辑器。第二步:配置Apache实现自动跳转
- 先开启Apache服务:
sudo apachectl start - 进入Apache的虚拟主机配置目录:
cd /etc/apache2/extra - 编辑虚拟主机配置文件:
sudo nano httpd-vhosts.conf - 在文件末尾添加这段配置(把bar.com换成你实际要跳转的域名):
<VirtualHost *:80> ServerName foo.com # permanent是301永久重定向,改成temp就是302临时重定向 Redirect permanent / https://bar.com/ </VirtualHost> - 保存退出后,重启Apache让配置生效:
sudo apachectl restart
- 先开启Apache服务:
现在打开浏览器访问foo.com,就会自动跳转到bar.com啦!
方法二:用Python轻量脚本实现(无需开启Apache)
如果不想动Apache,用Python写个小脚本也能快速搞定,适合临时使用:
第一步:同样先修改hosts文件,添加
127.0.0.1 foo.com,步骤和方法一一致。第二步:创建重定向脚本
在任意文件夹下新建一个名为redirect_server.py的文件,粘贴以下代码:from http.server import HTTPServer, BaseHTTPRequestHandler class RedirectHandler(BaseHTTPRequestHandler): # 处理GET请求 def do_GET(self): self.send_response(301) # 把请求的路径也带过去,比如foo.com/test会跳转到bar.com/test self.send_header('Location', 'https://bar.com' + self.path) self.end_headers() # 如果需要处理POST请求,也可以添加这个方法 def do_POST(self): self.send_response(301) self.send_header('Location', 'https://bar.com' + self.path) self.end_headers() if __name__ == '__main__': # 监听80端口(需要管理员权限) server_address = ('', 80) httpd = HTTPServer(server_address, RedirectHandler) print("重定向服务已启动,监听端口80...") httpd.serve_forever()第三步:运行脚本
打开终端,进入脚本所在的文件夹,输入以下命令(需要sudo因为80是特权端口):sudo python3 redirect_server.py只要终端窗口保持打开,访问foo.com就会自动跳转。如果想要后台运行,在命令末尾加
&即可,关闭时可以用ps aux | grep redirect_server.py找到进程号,再用kill 进程号终止服务。
一些注意事项
- 修改hosts后如果没生效,试试刷新DNS缓存:
对于Mac OS Monterey及以上版本:
旧版本可以用:sudo killall -HUP mDNSRespondersudo dscacheutil -flushcache - 如果目标域名是HTTPS的,上面的配置已经能正确跳转,但如果想让foo.com本身支持HTTPS,需要额外配置SSL证书,本地测试的话一般用HTTP就足够了。
- 用完后要恢复的话,删掉hosts里添加的那行,Apache可以用
sudo apachectl stop停止服务,脚本直接关闭终端或者kill进程就行。
备注:内容来源于stack exchange,提问作者Yeonho
相关产品推荐
相关产品推荐

