Предполагая следующие папки:
/
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
, поэтому нет никакой магии переписывания, которая могла бы заставить эту работу работать.Вот несколько возможных решений:
Вы можете настроить несколько <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, и я могу все изменить», это кажется самым простым и эффективным решением.
Вы можете изучить использование выходного фильтра Apache, чтобы переписать все ссылки в ваших документах. То есть, если кто-то запросил /folder1/index.php
, Apache перепишет ссылки, которые выглядят как /file.php
к /folder1.php
. Обычно для таких вещей я бы рекомендовал mod_proxy_html, но я не совсем уверен, будет ли это работать за пределами настройки прокси.
Если mod_proxy_html не сработает, вы можете попробовать использовать mod_sed. Вам, вероятно, придется создавать это отдельно для чего-то более раннего, чем Apache 2.4, и сделать это будет намного сложнее.
Я рекомендую VirtualHost
на основе решения.