2015-06-23 3 views
1

У меня есть два независимых сайта на моем сервере. Один из них находится в подпапке другого. Оба веб-сайта доступны в двух разных доменах. После структуры папок на моем сервере:.htaccess перенаправить корень в папку

/www    <- one.com 
    /index.html 
    /assets 
     ... 
    /folder   <- two.com 
     /.htaccess 
     /index.html 
     /assets 
      ... 

Поэтому, если я хочу, чтобы получить доступ к вебу-сайту two я могу сделать это с помощью следующих адресов:

one.com/folder 
two.com 

Моей проблема: Используя абсолютные пути для включения файлов (css/js/img) на веб-сайте two, мне нужно адаптировать мой корень, в зависимости от того, какой URL-адрес пользователь получает на сайте two. После примера для иллюстрации:


HTML-файл /www/folder/index.html содержит изображение:

<img src="/assets/img.jpg" /> 

Если доступ пользователей этот HTML-файл через домен one.com/folder/index.html путь исходного изображения переводится в one.com/assets/img.jpg, где она получила Не находите изображения. Правильно было бы one.com/folder/assets/img.jpg (одно уведомление folder на пути). Очевидно, что если пользователь вызывает two.com/index.html, проблема не существует.


Поэтому я думал, что я хотел бы изменить корень (базовый каталог) веб-сайта two через .htaccess мод переписан в зависимости от URL вызывается. После простой псевдо код, который я хотел бы реализовать:

if url == one.com/folder* 
    root = /folder/ 
else 
    root =/

И после того, что я до сих пор для моего .htaccess файла:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www\.)?one\.com 
RewriteRule ^/(.*)$ /folder/$1 [R] 

К сожалению, это, кажется, как будто я что-то пропустил. Пока это не работает. Любые советы очень ценятся!

ответ

1

Вы можете поместить это правило в /www/.htaccess папке:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(assets/.+)$ /folder/$1 [L,NC,R=301] 
+0

Отличная идея, спасибо очень много. Единственное, что я забыл упомянуть на веб-сайте, имеет похожую структуру, то есть он также содержит папку «assets» (обновленный вопрос). Поэтому это решение не работает. Простите, я сосредоточился на подпапке ('folder') и не думал, что что-то вне ее может быть действительно важным. – lorenzli

+0

Хмм, что полностью меняет проблему. Если в корне есть '/ assets /', то почему 'one.com/assets/img.jpg' вызывает 404 не найден? – anubhava

+0

Потому что я упростил пример: например, сайт 'two' содержит баннер ('/assets/banner.jpg'), но на сайте 'one' нет. Кроме того, веб-сайт 'two' содержит js-скрипты ('/assets/js/script1.js' ...), опять же сайт 'one' этого не делает. Так что, конечно, у меня есть возможность выбрать два разных имени для двух папок 'assets', но разве эта проблема не разрешима с помощью« RewriteCond », а затем с использованием вашего предлагаемого« RewriteRule »? Спасибо вам за помощь! – lorenzli

Смежные вопросы