Apache-2.2

為使用者目錄中的路徑解析 apache 上的本地子域

  • January 5, 2011

在 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

引用自:https://serverfault.com/questions/178976