在 Windows 開發環境為每個專案配置獨立域名(如 www.myproject.local),需修改 Apache httpd.conf 啟用虛擬主機、設定 DocumentRoot、目錄權限,並編輯系統 hosts 檔案解析域名。本文提供標準化步驟與常見錯誤排查。
httpd.conf檔案位置:C:\Apache24\conf\httpd.conf (視安裝路徑調整)
# 搜尋並取消註解 (去掉 #)
LoadModule vhost_alias_module modules/mod_vhost_alias.so
# 確認已載入
LoadModule rewrite_module modules/mod_rewrite.so
# 取消註解
Include conf/extra/httpd-vhosts.conf
conf/extra/httpd-vhosts.conf 新增虛擬主機<VirtualHost *:80>
ServerName www.myproject.local
ServerAlias myproject.local
DocumentRoot "D:/Projects/myproject/public"
<Directory "D:/Projects/myproject/public">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
# 可選:獨立錯誤/存取日誌
ErrorLog "logs/myproject-error.log"
CustomLog "logs/myproject-access.log" common
</VirtualHost>
關鍵指令說明:
ServerName:主域名,瀏覽器訪問時匹配。DocumentRoot:專案公開目錄(如 Laravel public/、Symfony public/、ThinkPHP public/)。AllowOverride All:允許 .htaccess 覆蓋(框架路由重寫必須)。Require all granted:Apache 2.4+ 權限寫法,舊版為 Order allow,deny / Allow from all。hosts 檔案路徑:C:\Windows\System32\drivers\etc\hosts
127.0.0.1 www.myproject.local
127.0.0.1 myproject.local
::1 www.myproject.local
注意:IPv6 ::1 同步加入,避免瀏覽器優先解析 IPv6 導致連線失敗。
# 在 D:/Projects/myproject/public 建立 index.php
<?php
echo "Virtual Host Works! " . date('Y-m-d H:i:s');
phpinfo();
# 命令列 (以管理員執行)
httpd -k restart
# 或 Windows 服務管理器重啟 Apache2.4 服務
瀏覽器訪問:https://www.myproject.local/ 應顯示測試頁面。
| 現象 | 可能原因 | 解決方法 |
|---|---|---|
| 瀏覽器顯示「找不到伺服器」 | hosts 未生效 / DNS 快取 | ipconfig /flushdns,確認 hosts 格式正確 (無多餘空格、Tab 分隔) |
| 403 Forbidden | 目錄權限 / AllowOverride / Require | 檢查 <Directory> 區塊 Require all granted、路徑正確、磁碟權限允許讀取 |
| 404 Not Found (框架路由) | .htaccess 未生效 / mod_rewrite 未載入 | 確認 LoadModule rewrite_module、AllowOverride All、.htaccess 存在且可讀 |
| Apache 啟動失敗 | 語法錯誤 / 埠佔用 | httpd -t 檢查語法;netstat -ano | findstr :80 查埠佔用 |
| 變更後不生效 | 未重啟 Apache / 瀏覽器快取 | 重啟服務,強制重新整理 Ctrl+F5 |
若專案眾多,可啟用 mod_vhost_alias 動態映射:
<VirtualHost *:80>
ServerName dev.local
ServerAlias *.dev.local
VirtualDocumentRoot "D:/Projects/%1/public"
<Directory "D:/Projects/*/public">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
配合 hosts:
127.0.0.1 project1.dev.local
127.0.0.1 project2.dev.local
# 之後新增專案只需建立資料夾 D:/Projects/project3/public,無需改 Apache 設定
%1 代表域名第一段 (project1, project2...)。
# 安裝 mkcert (Go 編譯的單一執行檔)
mkcert -install
mkcert myproject.local "*.myproject.local" localhost 127.0.0.1 ::1
# 產生 myproject.local.pem + myproject.local-key.pem
# httpd-vhosts.conf 新增 443 埠 VirtualHost
<VirtualHost *:443>
ServerName www.myproject.local
DocumentRoot "D:/Projects/myproject/public"
SSLEngine on
SSLCertificateFile "C:/certs/myproject.local.pem"
SSLCertificateKeyFile "C:/certs/myproject.local-key.pem"
<Directory ...> ... </Directory>
</VirtualHost>