在每个文件夹的基础上设置服务器根

假设以下文件夹:

/ index.html /folder1/ index.html page.html 

(所以,根index.html和folder1与index.html和page.html。)

我希望page.html中的链接指向“/”链接到/folder1/index.html。

另外,在PHP中,例如,如果我include('/file.php'); ,它应该从/folder1/而不是root。

基本上,folder1里面的任何文件都要考虑//folder1/

我尝试了RewriteBase /folder1/.htaccess但没有奏效。

这怎么可能呢?

这就是你想要做的事情的问题:

  • 客户端请求/folder1/index.html ,其中包含到/file.php的链接。
  • 客户端请求/file.php 。 在这一点上, 服务器不知道这个请求来自/folder1里面的文件 ,所以没有重写的魔法可以使这个工作。

以下是一些可能的解决scheme:

  1. 您可以在configuration中设置多个<VirtualHost>块,每个块都具有不同的DocumentRoot 。 这要求您控制DNS,或者您控制访问您的服务器的所有客户端的hosts文件。

    例如,你可以在服务器configuration中这样做:

     <VirtualHost *:80> ServerName server1 DocumentRoot /var/www/server1/html </VirtualHost> <VirtualHost *:80> ServerName server2 DocumentRoot /var/www/server2/html </VirtualHost> 

    每个虚拟主机指向一个不同的文件夹,所以如果你请求http://server1/ ,所有的链接将parsing为/var/www/server1/html内的文档,对于server2 。 正如我所提到的,这可以假设你可以让server2server2在你的客户端的DNS中显示,或者你可以在客户端主机文件中添加类似如下内容:

     your.server.ip server1 server2 

    既然你说过,“这是本地主机,我可以改变任何东西”,这似乎是最简单和最有效的解决scheme。

  2. 您可以考虑使用Apache输出filter来重写文档中的所有链接。 也就是说,如果有人请求/folder1/index.php链接重写为/folder1.php 。 通常对于这样的事情,我会推荐mod_proxy_html ,但我不完全确定,如果这将在代理设置以外运作。

    如果mod_proxy_html不起作用,你可以尝试使用mod_sed 。 你可能需要为Apache 2.4之前的任何东西单独构build它,并且要正确地处理更为棘手。

    我推荐基于VirtualHost的解决scheme。