我知道如何以一种常见的方式使用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的虚拟主机,并创build了一个文件,这样URL http://test.local/info.php打印出PHP的configuration和内容。 现在让我们回到mod_rewrite指令; 我希望通过编写我在post的http://test.internal/info.php写的东西,当我打开URL http://test.internal/info.php它将由test.local/info.php脚本服务。 谁能告诉我我做错了什么?
顺便说一下,我已经写在Apache的主要configuration文件的指令,而不是在虚拟主机,我坚持这一点。
[UPDATE]
我已经添加了以下两行到Apache的configuration文件,所以我可以debuggingRewrite的行为:
RewriteLog "/tmp/rewrite.log" RewriteLogLevel 9
我在这台机器上有几个使用Rewrite的虚拟主机,当我访问它们时,由于这两行在指定的path中创build了一个日志文件。 但是当我访问http://test.internal/info.php没有创build日志文件。
[UPDATE]
我要澄清我的目标,也许我从头做了一切错误。
我有许多VPS每个托pipe一个不同的网站。 他们都居住在本地networking,我想添加一个前端到这个网站的集合,所以他们可以从互联网上访问。 但事情是这个集合的成员是dynamic添加或删除,所以我不想修改我的DSN和/或反向代理服务器的configuration文件,每次有所改变。 我可以在DNS服务器中使用通配符将所有请求都指向特定域到前端(反向代理服务器),然后由前端将请求redirect到使用其子域的相应VPS(每个子域是逻辑上分配给VPS)。 为此,我将设置一个本地DNS映射一些虚拟域名到内部VPS IP。 剩下的就是反向代理服务器应该重写请求的URL,使其与虚拟域匹配。
我无法理解的解决scheme的唯一部分是如何告诉Apache将传入请求的域映射到虚拟域!
有什么build议么?
我find了另一种方法来解决我的问题,它被称为mod_proxy_express ,它在Apache 2.4中可用。 它能够使用数据库将大量域名映射到他们的IP。