我在 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),前提是
- RHEL 防火墙接受来自端口 5000 的 TCP 连接。
- 如果你位于路由器/防火墙后面,则端口 5000 将被接受并路由到该 Web 服务器
- web1 / web2 通过 DNS 解析,这意味着子域被声明并且 IP 被设置为该 Web 服务器(或路由器......)
将文档文件托管在另一台 Web 服务器上,并更新 testdomain.com 的 DNS,使 web1/2 子域解析到该新 Web 服务器的 IP 地址
答案3
创建两个虚拟主机,各有各的DocumentRoot
。