2011-09-07 107 views
4

我想創建一個註冊表單來創建子域(但在本地主機上),但我遇到了一些問題。我知道如何創建子域,在虛擬主機例如寫這些:本地主機上的子域

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "C:/wamp/www/something/" 
    ServerName localhost 
    ServerAlias something.localhost 
    ErrorLog "logs/error.log" 
    CustomLog "logs/access.log" common 
</VirtualHost> 

,並把這個行內的主機:

127.0.0.0    something.localhost 

它的工作,但我想的是,當我註冊一個新的子域(例如:other),然後當我嘗試打開other.localhost時,它會打開指定的文件夾(../www/other/)。 我在vhosts中使用「ServerName * .localhost」,「ServerName localhost」,「ServerAlias * .localhost」,「ServerAlias localhost」以及主機「127.0.0.1 * .localhost」在所有這些排列中對其進行了嘗試,但這些都不適合我。 我曾經想過,在註冊時,我在虛擬主機中添加了一個新的數據塊,並提供了最佳數據,但我認爲這不是很安全/可行,或者是最好的方法。

希望有人能幫助我!

在此先感謝!

回答

2

你可以嘗試一個rewriterule,它將一個子域轉換成一個文件夾。

例如,mystuff.localhost變爲本地主機/的MyStuff

otherthing.localhost/some/dir/here變得localhost/otherthing/some/dir/here

+0

重寫規則進入htaccess的?我從來沒有在本地主機上試過htaccess,所以它放在索引文件所在的同一個文件夾中? – matthew3r

+0

檢查[mod_rewrite上的apache文檔](http://httpd.apache.org/docs/current/mod/mod_rewrite。html):rewriterules進入包含在conf.d中的文件。 – Konerak

2

嘗試在serveralias增加另一個域:

ServerAlias something.localhost other.localhost 
+0

這對我來說很合適,但我可以手動完成,或者不是?我想在註冊時執行此操作,但我並不真正知道這是一種以編程方式放入其他.localhost的安全解決方案,或者我可以這樣做。 - 我註冊的意思是,用戶可以爲自己更改一個子域名,並達到目的。 – matthew3r

27

http://*.lvh.me/是一個別名localhost。完美的測試子域名。

$ host lvh.me 
lvh.me has address 127.0.0.1 
$ host foo.lvh.me 
foo.lvh.me has address 127.0.0.1 

編輯:2016/07:lvho.st走了,換了工作域

+0

我想知道域名來自哪裏,但我認爲它代表「本地虛擬主機」。尼斯。對於像我這樣的人,想知道它是否是一些標準的操作系統:[不,只是一個註冊的域名](http://network-tools.com/nslook/Default.asp?domain=lvho.st&type=1&server=ns2。 nic.st&類= 1&端口= 53&超時= 5000)。它[不支持IPv6](http://network-tools.com/nslook/Default.asp?domain=lvho.st&type=28&server=ns2.nic.st&class=1&port=53&timeout=5000)(但)但我猜測這對localhost無關緊要。 – Arjan

+0

是的,有些靈魂爲大衆註冊:) – jpillora

+0

太棒了!我怎麼從來不知道這件事? –

9

lvh.me也是一個別名爲localhost。 Jamo對於lvho.st來說是完美的測試子域名。

+0

這現在只適用於lvh.me,而不適用於lvho.st. lvh.me似乎支持子子域和子子子域等,這很方便(例如:http://foo.bar.bat.bongo.lvh.me) –

0

您應該創建一個dinamically configured mass virtual hosting

這允許您定義單個虛擬主機條目來處理不同主機的所有傳入請求,並將每個請求委託給相應的目錄。

這樣可以避免爲每個添加的新域配置新的虛擬主機。相反,您只需在文件系統中創建目錄,一切正常。

首先啓用了mod_vhost_alias擴展:

sudo a2enmod vhost_alias 

然後配置單個虛擬主機條目是這樣的:

# get the server name from the Host: header 
UseCanonicalName Off 

# this log format can be split per-virtual-host based on the first field 
# this makes it easy to grep 
LogFormat "%V %h %l %u %t \"%r\" %s %b" combined 

<VirtualHost *:80> 

    # the %0 is replaced by the host name on each request 
    # if you want to use only part of the domain as directory 
    # you would have to change the %0 for a %1 or %2 depending 
    # on which part of the domain you want to take. 
    VirtualDocumentRoot /your-main-directory/%0 

    # configure your main directory anyway you want it 
    <Directory /your-main-directory> 
     Options Indexes FollowSymLinks -MultiViews 
     AllowOverride All 
     Order allow,deny 
     allow from all 
    </Directory> 

    #I have a single cgi-bin directory, but there is also a VirtualScriptAlias 
    # available in case you need it. 
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
     AllowOverride None 
     Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
     Order allow,deny 
     Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost>