如何根据 URL 更改文档根目录

如何根据 URL 更改文档根目录

我在 RHEL 5.3 中使用 httpd-2.2.3-22。

如何根据 URL 重定向到 Linux 中的不同文档根目录。

例子:

testdomain.com 的文档根目录是 /var/www/vhost/testdomain.com/httpdocs

如果 URL 是http://web1.testdomain.com那么它应该将文档根目录指向 /var/www/vhost/testdomain.com/httpdocs/web1。

如果 URL 是http://web2.testdomain.com那么它应该将文档根目录指向 /var/www/vhost/testdomain.com/httpdocs/web2。

其中 web1 和 web2 是父文档根目录下的两个不同文件夹。

请告诉我在这种情况下如何配置 apache?

温暖的问候

苏普拉提克

答案1

听起来您正在寻找动态虚拟主机。Apache 文档中有一篇关于此内容的非常好的文章:

动态配置的海量虚拟主机

有多种方法可以做到这一点,但最灵活的可能是 mod_rewrite。根据您的示例,您可以使用以下虚拟主机配置:

<VirtualHost *>
        ServerName testdomain.com
        ServerAlias *.testdomain.com

        RewriteEngine on

        RewriteMap lowercase int:tolower

        # check the hostname is right so that the RewriteRule works
        RewriteCond ${lowercase:%{SERVER_NAME}} ^[a-z0-9-]+\.testdomain\.com$

        # concatenate the virtual host name onto the start of the URI
        # the [C] means do the next rewrite on the result of this one
        RewriteRule ^(.+) ${lowercase:%{SERVER_NAME}}$1 [C]

        # now create the real file name
        RewriteRule ^([a-z0-9-]+)\.testdomain\.com/(.*) /var/www/vhost/testdomain.com/httpdocs/$1/$2
</VirtualHost>

答案2

您需要为服务器配置虚拟主机。RHEL 上的 /etc/httpd/conf 中应该有配置文件(如果您使用的是自定义版本,则可能是 /etc/apache2)。打开 httpd.conf 并编辑底部附近的虚拟主机部分。

例如,您可以插入文件(取自下面的链接)

Listen 80

NameVirtualHost *:80

<VirtualHost *:80>
  DocumentRoot /var/www/vhost/testdomain.com/httpdocs/web1
  ServerName web1.testdomain.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/vhost/testdomain.com/httpdocs/web2
  ServerName web2.testdomain.com
</VirtualHost>

如果 Apache 正在监听端口 80(http,默认)。那么您需要重新启动 Apache(/etc/init.d/httpd restart 或“apache2 restart”)

请查看Apache 虚拟主机

回复:无法添加虚拟主机

如果无法添加虚拟主机,则不太可能进一步更改 Apache 和系统配置。我看到的唯一解决方案是

  • 直接使用http://testdomain.com/web1(web2)

  • 如果你不介意使用其他端口(即非 80),你可以安装 nginx,它的配置非常简单,它将接受自定义配置文件,并将其配置为接受来自端口 5000 的连接(例如http://web1.testdomain.com:5000),前提是

    1. RHEL 防火墙接受来自端口 5000 的 TCP 连接。
    2. 如果你位于路由器/防火墙后面,则端口 5000 将被接受并路由到该 Web 服务器
    3. web1 / web2 通过 DNS 解析,这意味着子域被声明并且 IP 被设置为该 Web 服务器(或路由器......)
  • 将文档文件托管在另一台 Web 服务器上,并更新 testdomain.com 的 DNS,使 web1/2 子域解析到该新 Web 服务器的 IP 地址

答案3

创建两个虚拟主机,各有各的DocumentRoot

相关内容