Apache:根据主机名加载脚本

Apache:根据主机名加载脚本

我认为这并不是那么复杂,但我很难找到解决问题的最佳方法。

我们有一个网站,site.example.com其下有 5 个页面。假设这 5 个页面是site.othersite.com/page1.html, page2.html, page3.html, page4.html, page5.html。现在,我们还有另外 5 个子域,lp1.OTHERSITE.com, lp2.othersite.com, lp3.othersite.com, lp4.othersite.com, lp5.othersite.com。所有这些域都托管在同一台服务器上,位于同一文档根目录下。现在,我们需要 Apache 执行透明重定向(即地址栏不变)到以下模式:

lp1.othersite.com --> site.example.com/page1.html
lp2.othersite.com --> site.example.com/page2.html
lp3.othersite.com --> site.example.com/page3.html
lp4.othersite.com --> site.example.com/page4.html
lp5.othersite.com --> site.example.com/page5.html

仅使用 Apache 可以实现这一点吗?如果不行,我已经编写了一个 PHP 脚本,根据传入的主机名在 iframe 中加载 site.example.com/page*.html 页面,但我不确定如何告诉 Apache 将这 5 个 lp*.othersite.com 域发送到该 PHP 脚本。

我希望我能够很好地解释这个项目。我们基本上需要将 lp* 子域分别重定向到不同的 site.example.com/page*.html 页面,而无需更改地址栏中的地址。

非常感谢您的提示和建议。我所能做的就是让 Apache 将这些 URL 重定向到我的 PHP 脚本,但地址栏发生了变化,而且由于是重定向,地址栏也发生了变化(此时 PHP 脚本不起作用,因为主机名已经改变)

答案1

为每个主机名设置一个虚拟主机,使用相同的方法DocumentRoot,但使用:

DirectoryIndex page1.html

对于 lp1,

DirectoryIndex page2.html

对于 lp2 等,以便这些页面被用作默认页面而不是index.html

因此 eghttp://lp3.othersite.com/将提供page3.html。它还允许您导航到http://lp3.othersite.com/page1.htmletc。但默认页面将是您通过DirectoryIndex指令指定的页面。

答案2

也许我遗漏了一些东西,但我认为您所要求的只是虚拟主机。https://httpd.apache.org/docs/2.2/vhosts/

虚拟主机需要将多个 DNS 条目设置为同一个 Web 服务器。Apache 根据使用的 DNS 名称提供指定页面。除非您进行重定向,否则用户将看到他们输入的内容。

答案3

您可以使用 URL 重写来实现这一点。下面是一个快速即兴的示例(可能有效,也可能无效):

RewriteCond %{HTTP_HOST} ^lp([0-9]).othersite.com [NC] 
RewriteRule ^(.*)$ page$1.html [NC,QSA] 

答案4

跟随Apache 虚拟主机文档VirtualHost为每个 FQDN设置,然后使用mod_dir设置DirectoryIndex,并用于重定向使用mod_rewrite

教程:

如何使用 Apache 和 Nginx 创建临时和永久重定向

相关内容