根据每个文件夹设置服务器根目录

根据每个文件夹设置服务器根目录

假设有以下文件夹:

/
  index.html

/folder1/
  index.html
  page.html

(因此,root 带有 index.html 而 folder1 带有 index.html 和 page.html。)

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

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

基本上,folder1 内的任何文件都被/视为/folder1/

我尝试RewriteBase /folder1/过,.htaccess但是没有用。

请问该如何做呢?

答案1

这是您正在尝试执行的操作所存在的问题:

  • 客户请求/folder1/index.html,其中包括指向 的链接/file.php
  • 客户端发出请求/file.php。此时,服务器不知道这个请求来自位于/folder1,因此没有任何重写魔法可以使其工作。

以下是一些可能的解决方案:

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

    例如,您可以在服务器配置中执行如下操作:

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

    每个虚拟主机指向不同的文件夹,因此如果您请求http://server1/,所有链接都将解析为 内的文档/var/www/server1/html,对于 也是如此server2。正如我所提到的,这假定您可以为客户端在 DNS 中创建server1server2显示,或者您可以将以下内容添加到客户端主机文件:

    your.server.ip server1 server2
    

    既然您说过“这是本地主机,我可以更改任何内容”,那么这似乎是最简单、最有效的解决方案。

  2. 您可以研究使用 Apache 输出过滤器来重写文档中的所有链接。也就是说,如果有人请求/folder1/index.php,Apache 会重写看起来像/file.php的链接/folder1.php。一般来说,对于这种事情,我建议mod_proxy_html,但我不完全确定这是否可以在代理设置之外运行。

    如果mod_proxy_html不起作用,你可以尝试使用mod_sed。对于 Apache 2.4 之前的版本,您可能必须单独构建它,而且要正确构建它会更加棘手。

    我推荐VirtualHost基于的解决方案。

相关内容