Apache-2.2
為使用者目錄中的路徑解析 apache 上的本地子域
在 Apache 2.2.x 上,我啟動了 mod_userdir。我使用了預設設置,因此
http://localhost/~name/
將連接~name/public_html/
到 public_html 中的路徑,例如~name/public_html/mySite
可以通過http://localhost/~name/mySite
.我怎樣才能實現,可以通過相同的路徑到達
http://mySite.name.localhost/
?我不想要像其他 SF 問題中建議的手動方法(例如Apache: Setting up local test server with subdomains),而是想要將所有可用路徑自動映射到相應的 URL。我認為,需要採取幾個步驟: 更改 mod_userdir 配置,以便 localhost 的子域將與機器上所有可用的使用者名連接。第二步可能包括 mod_rewrite 的使用,以便子子域可以匹配到 ~name/public_html 中的路徑…
你最喜歡的方式是什麼?
編輯:
解決方案被標記。我做了一些小的修改以滿足特殊要求並添加了註釋:
RewriteEngine on # check, if not redirected yet RewriteCond %{ENV:REDIRECT_STATUS} ^$ # look for URLS like 'subdir.username.localhost' RewriteCond %{HTTP_HOST} (.+)\.([^.]+)\.localhost$ # check if /home/username/public_html/subdir is a directory or symbolic link RewriteCond /home/%2/public_html/%1 -d [OR] RewriteCond /home/%2/public_html/%1 -l # rewrite to default target RewriteRule ^(.+) %{HTTP_HOST}$1 [C] # rewrite to /home/username/public_html/subdir RewriteRule (.+)\.([^.]+)\.localhost(?::\d+)?(.*) /home/$2/public_html/$1$3 [L]
幾週前我也有類似的需求。我使用 mod_rewrite 解決了這個問題,把它放在我的預設虛擬主機定義中:
RewriteEngine on # look for URLS like 'subdir.username.localhost' RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{HTTP_HOST} ([^.]+)\.([^.]+)\.localhost$ RewriteCond /home/%2/public_html/%1 -d RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ([^.]+)\.([^.]+)\.localhost(?::\d+)?(.*) /home/$2/public_html/$1$3 [L]
https://gist.github.com/744971有更多資訊,包括讓 username.localhost 解析為 /home/username/public_html