使用 mod_rewrite 重写整个 URL

使用 mod_rewrite 重写整个 URL

我知道如何以常见的方式使用 Apache 的 mod_rewrite,但现在我尝试以不同的方式使用它,但目前还没有成功。以下是我写的:

RewriteEngine on
RewriteMap lowercase int:tolower
RewriteCond %{lowercase:%{HTTP_HOST}} ^([^.]+)\.internal$
RewriteRule ^(.*)$ http://%1.local$1

以下是整个故事:

我已向hosts文件添加了两行,如下所示:

127.0.0.1    test.local
127.0.0.1    test.internal

我还在我的 Apache 中添加了一个虚拟主机test.local,并创建了一个文件,以便 URLhttp://test.local/info.php打印出 PHP 的配置和其他内容。现在让我们回到 mod_rewrite 指令;我希望通过写下我在文章开头写的内容,当我打开 URL 时http://test.internal/info.php它将由test.local/info.php脚本提供服务。有人能告诉我我做错了什么吗?

顺便说一句,我已经在 Apache 的主配置文件中写了给定的指令,而不是在虚拟主机中,我坚持这样做。

[更新]

我在 Apache 的配置文件中添加了以下两行,以便可以调试Rewrite的行为:

RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9

我在这台机器上有几个虚拟主机Rewrite,当我访问它们时,由于这两行,会在指定路径中创建一个日志文件。但是当我访问时http://test.internal/info.php没有创建日志文件。

[更新]

我要明确我的目标,也许我从一开始就做的一切都是错的。

我有许多 VPS,每个 VPS 都托管一个不同的网站。它们都位于本地网络中,我想为这个网站集合添加一个前端,以便可以从 Internet 访问它们。但问题是,这个集合的成员是动态添加或删除的,所以我不想每次发生更改时都修改我的 DSN 和/或反向代理服务器的配置文件。我可以在 DNS 服务器中使用通配符将对特定域的所有请求定向到前端(反向代理服务器),然后由前端使用其子域将请求重定向到适当的 VPS(每个子域在逻辑上都分配给一个 VPS)。为此,我将设置一个本地 DNS,将一些虚拟域名映射到内部 VPS IP。剩下的就是反向代理服务器应该重写请求的 URL,使其与虚拟域匹配。

这个解决方案我唯一无法理解的部分是如何告诉 Apache 将传入请求的域映射到虚拟域!

有什么建议么?

答案1

我找到了另一种解决问题的方法,它叫做mod_proxy_expressApache 2.4 中提供了此功能。它能够使用数据库将大量域名映射到其 IP。

相关内容