在Apache上使用类似子文件夹的URL的虚拟主机

13

我想知道是否可以在Apache中使用类似以下域名的虚拟主机: http://something.com/somethinghttp://{server-ip-address-here}/something

我正在Ubuntu服务器上使用Apache 2.2.20进行测试,这是我的家庭服务器,我正在测试一些东西。我这里没有DNS服务器,我只有一个公共IP地址和一个附加在其上的来自open dns服务的域名。

所以,我做了什么:

  1. 我在/etc/apache2/sites-available中创建了一个新文件“demo”
  2. 我把下面的内容放进去(实际上是从默认文件复制并修改的):

    <code><VirtualHost *:80>
       ServerAdmin webmaster@localhost
       ServerName  {mydomain-here}/demo/
       DocumentRoot /vhosts/demo
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /vhosts/demo/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
    
    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
    
    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
    </VirtualHost>
    </code>
  3. 在 /etc/apache2/sites-enabled/ 中创建了一个符号链接,它指向 /etc/apache2/sites-available/demo

  4. 创建了 /vhosts/demo/index.html 文件。

现在的问题是,当我访问 {my-domain} 时,服务器会将我指向我所创建的虚拟主机,但问题是无论什么情况下,服务器都会将我指向该虚拟主机,而不仅仅是 {my-domain}/demo 这个URL。

总之,我想创建不同的虚拟主机,并将它们附加到具有相同基本 URL 的不同 URL 上,例如 www.mydomain.com/vhost1、www.mydomain.com/vhost2 等。

这种情况是否可能呢? 谢谢 :)

1个回答

16

首先,它在任何情况下都会跳转到那里的原因是你的虚拟主机设置中有一个*:80的设置,所以如果没有匹配请求的内容,它就会使用第一个虚拟主机条目。

如果我理解你想做什么的话,似乎你只需要为每个“虚拟主机”创建别名。

你试图做的不完全是一个虚拟主机(至少它应该做的不是这样),但你可能可以通过使用Apache的别名功能来完成它。

Alias /vhost1 /whatever/folder/your/vhost1/site/is/at
Alias /vhost2 /whatever/folder/your/vhost2/site/is/at

现在无论您使用哪个域名,例如http://whatever.com/vhost1http://whatever.com/vhost2,两者都将显示为不同的站点。


谢谢 :) 我创建了别名,我得到了我想要的结果!但是,出于兴趣: 看起来不可能以那种方式创建虚拟主机,对吗? - Jibla
1
我不这么认为,我以前从未这样使用过它。通常情况下,当您需要一个服务器能够为多个域名/IP 提供文件时,例如 www.vhost1.comwww.vhost2.com,您会使用虚拟主机,这是服务器知道要为 www.vhost1.comwww.vhost2.com 提供哪些文件的方法。 - jeffchong07
在你的情况下,只有一个域名,所以虚拟主机并不一定有用于区分你的网站。 - jeffchong07
谢谢,老兄 :) 我用别名得到了我想要的东西 ;) - Jibla
2
各位,你们应该把上述代码放在哪里? - Super Engineer
取决于您的配置设置。如果您想在整个服务器上执行此操作,可以将其添加到conf/httpd.conf文件中,或者您可以将其放置在conf.d/vhost.conf(或任何其他称为额外虚拟主机配置文件)中,以便在特定虚拟主机中添加这些规则。 - jeffchong07

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接