PHP如何绑定域名本地访问_PHP绑定域名本地访问做法【映射】

12次阅读

修改 hosts 文件是第一步,因为本地绑定域名本质是绕过 dns 查询,让系统将域名直接解析到 127.0.0.1 或 ::1;不修改则浏览器无法将请求发往本地 php 服务。

PHP如何绑定域名本地访问_PHP绑定域名本地访问做法【映射】

为什么修改 hosts 文件是第一步

本地绑定域名本质是绕过 DNS 查询,让系统把某个域名直接解析到 127.0.0.1::1。不改 hosts浏览器根本不会把请求发到你本地的 PHP 服务。

windows 路径:C:windowsSystem32driversetchosts
macOS / linux 路径:/etc/hosts

  • 用管理员(或 sudo)权限打开编辑器修改,否则保存失败
  • 新增一行即可,例如:127.0.0.1 myapp.test
  • 不要写 http://,也不加端口127.0.0.1:8000 myapp.test 无效)
  • 改完后执行 ping myapp.test,看到回复 127.0.0.1 才算生效

PHP 内置服务器如何支持自定义域名

PHP 7.4+ 的 php -S 默认只监听 127.0.0.1:8000,且不处理 Host 头校验——这意味着只要 hosts 指向正确,它就能响应 myapp.test 的请求,但需显式绑定地址。

  • 必须用 0.0.0.0:8000[::]:8000 启动,否则仅响应 localhost127.0.0.1
  • 命令示例:
    php -S 0.0.0.0:8000 router.php
  • router.php 需存在,哪怕只写 ,否则启动报错
  • 浏览器访问 http://myapp.test:8000 即可,无需额外配置

Apache / Nginx 中 PHP 项目绑定域名的关键点

和内置服务器不同,Apache/Nginx 是真正按 Host 头分发请求的,必须显式配置虚拟主机(VirtualHost),否则会落到默认站点或 404。

  • Apache:确保 httpd.confapache2.conf 中启用了 vhost_alias 模块,并在 httpd-vhosts.conf 中添加:
     ServerName myapp.test     DocumentRoot "/path/to/your/php/project"              AllowOverride All         Require all granted      
  • Nginx:在 nginx.conf 或站点配置文件中写:
server {     listen 80;     server_name myapp.test;     root /path/to/your/php/project;     index index.php; 
location ~ .php$ {     fastcgi_pass 127.0.0.1:9000; # 或 unix socket     fastcgi_index index.php;     include fastcgi_params;     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }

}

立即学习PHP免费学习笔记(深入)”;

  • 改完必须重启服务:sudo apachectl restartsudo nginx -s reload
  • 如果用 MAMP/XAMPP,它们通常自带虚拟主机管理界面,但底层仍是改上述配置文件

常见 403 / 404 / 连接被拒绝问题排查

绑定域名后打不开,大概率不是 PHP 问题,而是网络层或服务层卡住了。

  • ERR_CONNECTION_REFUSED:PHP 服务根本没运行,或端口被占用;检查 lsof -i :8000(macos/Linux)或 netstat -ano | findstr :8000(Windows)
  • ERR_CONNECTION_TIMED_OUThosts 没生效,或防火墙拦截了端口;确认 ping myapp.test 回复的是 127.0.0.1
  • 403 Forbidden:Web 服务器拒绝读取目录,常见于 Apache 的 Require all denied 默认策略,或 Nginx 的 root 路径权限不足
  • 404 Not Found:路由没匹配上,尤其用 PHP 内置服务器时,router.php 返回 false 会触发 404;检查是否漏写了该文件,或逻辑返回了 false

最易忽略的是:改了 hosts 和配置,却忘了清浏览器 DNS 缓存(Chrome 地址栏输 chrome://net-internals/#dns 点 Clear host cache)。

text=ZqhQzanResources