預設 XAMPP 只能透過 https://localhost/專案目錄 訪問專案。實際開發中常需求:
https://myproject.local)模擬正式環境Windows:C:\Windows\System32\drivers\etc\hosts(需管理員權限編輯)
macOS/Linux:/etc/hosts(需 sudo)
# 在檔案末尾新增 127.0.0.1 myproject.local 127.0.0.1 api.myproject.local 127.0.0.1 admin.myproject.local # 也可使用 *.local 通配(需配合 dnsmasq 或類似工具)
編輯 xampp/apache/conf/httpd.conf,確保以下行未被註釋:
# Virtual hosts Include conf/extra/httpd-vhosts.conf
編輯 xampp/apache/conf/extra/httpd-vhosts.conf:
# 必須啟用 NameVirtualHost(Apache 2.4+ 通常預設啟用,但明確宣告無妨)
NameVirtualHost *:80
# 【重要】第一個 VirtualHost 為預設回落,建議指向原本的 htdocs
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs"
ServerName localhost
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
# 專案一:myproject.local
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/myproject/public"
ServerName myproject.local
ServerAlias www.myproject.local
<Directory "C:/xampp/htdocs/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>
# 專案二:api.myproject.local
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/myproject-api/public"
ServerName api.myproject.local
<Directory "C:/xampp/htdocs/myproject-api/public">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
| 指令 | 用途 | |
|---|---|---|
DocumentRoot | 網站根目錄(公開可訪問的資料夾,通常為 public/) | |
ServerName | 主域名 | |
ServerAlias | 別名域名(如 www.、子域名) | |
Directory | 目錄權限控制,AllowOverride All 允許 .htaccess 覆蓋(Laravel/Symfony/CodeIgniter 等框架必須) | |
Require all granted | Apache 2.4+ 授權語法(舊版為 Order allow,deny / Allow from all) |
| 現象 | 可能原因 | 解決 |
|---|---|---|
| 所有域名都指向第一個專案 | 缺少預設 VirtualHost (localhost) | 在 vhosts.conf 最前面加上 localhost 區塊 |
| 修改 hosts 後不生效 | DNS 快取 | ipconfig /flushdns (Win) / sudo dscacheutil -flushcache (Mac) |
| .htaccess 不生效 | AllowOverride None | 設定 AllowOverride All |
| 403 Forbidden | 目錄權限、路徑錯誤 | 檢查 DocumentRoot 路徑、Directory 區塊、磁碟讀取權限 |
| 端口衝突 | 80/443 被佔用 | 關閉 IIS/其他 Web 服務、或修改 Apache Listen 埠 |