Назад | Перейти на главную страницу

Установите корень сервера для каждой папки

Предполагая следующие папки:

/
  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/ а не рут.

В принципе, любой файл в папке1 для рассмотрения / быть /folder1/.

Я попытался RewriteBase /folder1/ в .htaccess но это не сработало.

Как это можно сделать, пожалуйста?

Вот проблема в том, что вы пытаетесь сделать:

  • Клиент просит /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. Как я уже сказал, это предполагает, что вы можете либо сделать server1 и server2 показать в DNS для ваших клиентов, или что вы можете добавить что-то вроде следующего в файлы хоста клиента:

    your.server.ip server1 server2
    

    Поскольку вы сказали: «Это localhost, и я могу все изменить», это кажется самым простым и эффективным решением.

  2. Вы можете изучить использование выходного фильтра Apache, чтобы переписать все ссылки в ваших документах. То есть, если кто-то запросил /folder1/index.php, Apache перепишет ссылки, которые выглядят как /file.php к /folder1.php. Обычно для таких вещей я бы рекомендовал mod_proxy_html, но я не совсем уверен, будет ли это работать за пределами настройки прокси.

    Если mod_proxy_html не сработает, вы можете попробовать использовать mod_sed. Вам, вероятно, придется создавать это отдельно для чего-то более раннего, чем Apache 2.4, и сделать это будет намного сложнее.

    Я рекомендую VirtualHost на основе решения.