2013-09-09 5 views
1

У меня был домен: mydomain.com , указывающий на размещенную учетную запись «премиум» сервера Apache, которая может размещать несколько доменов. Я купил еще один домен: anotherDomain.com, который я установил как домен «добавить» с моим веб-хостом. Я могу получить доступ к anotherDomain несколько различных способов:Доступ к корневому домену из поддомена на размещенном сервере apache

mydomain.com/anotherDomain.com 
anotherDomain.mydomain.com 

и

anotherDomain.com 

Однако, только при использовании первого метода я могу получить доступ к «общим» файлам на mydomain.com из anotherDomain.com (с использованием относительной адресации).

Мне сказали, что есть сценарий, который я могу написать, так что anotherDomain.com может получить доступ к файлам «root» на mydomain.com, используя относительную адресацию, но они не могут сказать мне, как это сделать. Я просмотрел сеть, но, хотя есть много похожих вопросов, я не могу найти, как это сделать.

Просто переформулировать проблему: Я хочу, чтобы иметь возможность получить доступ к файлам в mydomain.com, так же, как я могу, когда anotherDomain.com доступен как: mydomain.com/anotherDomain.com, когда к ней обращаются как: anotherDomain.mydomain.com или anotherDomain.com

Пример: Если я получить доступ anotherDomain.com используя URL mydomain.com/anotherDomain.com затем в index.html для anotherDomain.com я могу иметь:

<img src='../imgs/generic.jpg'/> 

Какой доступ к «универсальному» изображению в папке imgs для mydomain.com. К сожалению, когда я обращаюсь к этой странице с помощью URL-адресов: anotherDomain.mydomain.com или anotherDomain.com, это не работает.

ответ

3

Прежде всего, я предполагаю, что у вас нет доступа к конфигурационным файлам вашего сервера и, следовательно, приходится иметь дело с ограниченными возможностями .htaccess. Если у вас есть, доступ к ним будет намного лучше.

Я предлагаю обойти проблему. Посмотрите на другие ответы и комментарии. Вы пошли на очень сложную установку. Вы можете заставить это работать, но в конечном итоге это будет боль в заднице.

Я немного поразмышляю и объясню несколько моментов в своем ответе.

Как я понимаю, у вас есть следующая структура файла на сервере:

public_html/ 
| 
+-- index.html   // the index of mydomain.com 
| 
+-- imgs/ 
| | 
| +-- generic.jpg 
| 
+-- anotherDomain.com/ 
    | 
    +-- index.html  // index of anotherDomain.com 

Предположим, вы просматриваете http://anotherDomain.com/. Когда браузер попытается загрузить generic.jpg, он создаст этот URL: http://anotherDomain.com/../imgs/generic.jpg. Это, однако, почти каждый браузер, будет переписан как http://anotherDomain.com/imgs/generic.jpg.

Значит, вы должны сообщить серверу, как сервер этого файла.

  • Вы можете создать правило, которое предлагает @anubhava. Если вы обращаетесь к http://anotherDomain.com/imgs/*, перенаправите его в директорию imgs на виртуальном хосте http://mydomain.com/. Таким образом, контент будет принадлежать mydomain.com.

  • Я бы предложил создать символическую ссылку, если у вас есть такая возможность.

    | 
    +-- anotherDomain.com/ 
        | 
        +-- index.html  // index of anotherDomain.com 
        | 
        +-- imgs --> ../imgs/ 
    

    Таким образом, вы можете легко получить доступ ко всем изображениям. Однако они будут отображаться как содержимое anotherDomain.com. Это можно рассматривать как преимущества или как уже упоминалось как недостаток (поисковые системы.) Создание символической ссылки также иногда может быть выполнено с помощью функции PHP (symlink), если ваш провайдер не поддерживает ее через свой интерфейс.

+0

К сожалению, я не выберите, как мой веб-хост устанавливает мои домены. Я хотел бы отразить то, что у меня есть на моей локальной машине, где я могу создавать/использовать общие общие файлы. Мне очень нравится идея создания папки symlink. Кажется, это абсолютно идеальное решение. * К сожалению *, похоже, нет способа сделать это, используя интерфейсы, предоставляемые моим веб-хостом. : ... ( – iPadDeveloper2011

+1

Вы можете попробовать использовать функцию файловой системы PHP 'symlink';) Иногда это работает. – Scolytus

+0

И в зависимости от денег, которые вы потратили: Обычно у хороших поставщиков есть поддержка для своих клиентов. Вы уверены, что не можете убедить их изменить свою конфигурацию виртуального хоста? – Scolytus

2

Потеряв время, пытаясь сделать это с помощью файлов .htaccess, я, наконец, разработал способ сделать это простым языком html. В заголовке, перед всеми другими ссылками, поставьте:

<base href="http://mydomain.com/anotherDomain.com" /> 

И вот оно. Удалите это для разработки на вашей локальной машине. ;-)
Запомнить be a bit careful when using the base tag.

Редактировать: Я нашел, что это вызывает другие проблемы. Например, относительные ссылки относятся к http://mydomain.com/anotherDomain.com, а не к http://anotherDomain.com.
Добавление .htaccess кода в каталог http://mydomain.com корня, как:

RedirectMatch /anotherDomain.com(/)?$ http://anotherDomain.com 

Решает, но вводит другие проблемы. Все еще ищущий хороший ответ на этот вопрос ... Кто-нибудь?

+0

+1 для вашего ответа. Я хотел сделать снимок в правилах .htaccess, но почему-то я не мог понять, что вы понимаете. Не могли бы вы объяснить свою проблему с более подробной информацией и примерами. – anubhava

+0

Привет @anubhava. Я добавил пример на вопрос, как вы просили. – iPadDeveloper2011

+0

@anubhava. Я * думаю * переписывание 'anotherDomain.com' как' mydomain.com/anotherDomain.com' * должен * работать, но я не имел успеха с этим сам. – iPadDeveloper2011

1

Попробуйте этот код в public_html/anotherDomain.com/.htaccess:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# for images only 
RewriteCond %{HTTP_HOST} ^(www\.)?anotherDomain\.com$ [NC] 
RewriteRule ^(imgs/.+)$ http://mydomain.com/anotherDomain.com/$1 [L,NC,R] 

# or for all files 
RewriteCond %{HTTP_HOST} ^(www\.)?anotherDomain\.com$ [NC] 
RewriteRule ^(.*)$ http://mydomain.com/anotherDomain.com/$1 [L,NC,R] 

Remove (или закомментировать) ваш <base... тег.

+0

Я подтвердил, что это не работает. Что вы здесь говорите - я думаю - это переписать 'anotherDomain.com/imgs/...' как 'mydomain.com/imgs/...', что не то, что я хотел :-(Большое спасибо за хотя, тем не менее :-) – iPadDeveloper2011

+0

Но это именно то, что вы делаете через свой тег '' – anubhava

+0

Не совсем :-). С базовым тегом './Imgs' по-прежнему остается' mydomain.com/anotherDomain.com/imgs' (то же, что и 'anotherDomain.com/imgs'). Полезная вещь об этом теге состоит в том, что '../ imgs' относится к' mydomain.com/imgs'. На всякий случай я проверил ваше решение, следуя вашим инструкциям. – iPadDeveloper2011

0

Доступ к одному и тому же контенту через несколько разных доменов, возможно, не отличная идея. Это может сделать ваш контент похожим на дублированное содержимое из поисковых систем. Если вы придерживаетесь этой идеи, вы должны хотя бы попытаться зарегистрировать все содержимое с помощью метатега или атрибута canonical url.

Теперь мне обычно нравятся относительные URL-адреса, так как всегда предварительный URL-адрес с доменом затрудняет повторное использование через proxys (но при использовании ajax-материала, например, относительного URL-адреса недостаточно, вы всегда будете заканчивать некоторый абсолютный URL-адрес в некоторых местах). Но здесь вы используете относительный URL-адрес с '../imgs/generic.jpg'. Это означает, что этот url ссылается больше на то, как вы помещаете файлы на свой сервер, чем что-то значимое. Это может иметь смысл в одном домене, но для обмена данными между доменами это не так. Что делать, если в какой-то момент вам нужно переместить новые файлы домена и корень каталога в другое место (на другом сервере?). От пользователя (и ботов и поисковых систем) ваши домены не связаны. Любой прокси-сервер, которому вы не владеете, будет запрашивать актива несколько раз, если его спрашивают через subdomain.mydomain.com/foo.jpg и subdomain.com/foo.jpg, поэтому попытка поделиться этим материалом с вашими доменами не имеет смысла для остальной части Интернета, это просто для вашего собственного управления, на вашем боковая сторона. Поэтому не стесняйтесь упрощать управление.

Вам лучше управлять своим URL таким образом, чтобы URL-адрес имел для вас что-то вроде '/common/imgs/generic.jpg' и '/site/imgs/custom.jpg'. Затем на домене Virtualhosts, на стороне сервера, вы можете работать с отображением url->directory & files. Это сопоставление может быть установлено через Alias, AliasMatch и, конечно же, директивы mod_rewrite.

Например простой

Alias /common /path/to/mydomain/assets 

бы позволить вам карту всех MYDOMAIN.COM активов на VirtualHost, содержащие эту инструкцию. В тот день, когда вы решите переместить все вещи на своем веб-сервере, вам просто придется переработать перезаписи и псевдонимы apache, а не все, что вы кодируете для управления URL-адресами.

+0

Спасибо за ваш ответ. К сожалению, я пользуюсь коммерческим сервисом веб-хостинга, и я не имеют доступа к конфигурации Apache, а 'Alias' не может использоваться в файлах .htaccess. – iPadDeveloper2011

+0

Да, но mod_rewrite может делать то же самое и даже больше. Основное использование« RewriteRule »обычно такое же, как и материал, созданный 'Alias'. Сопоставление пути запроса к пути файловой системы. – regilero

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