Проблема: некоторые индивидуальные интернет-провайдеры иногда не могут разрешить один из моих виртуальных хостов при установке LAMP. Ubuntu 10.04 LTS, Apache 2. Я ищу хак, который может делать это по IP.
Предыстория: На этой машине есть несколько виртуальных хостов:
default.example.com subdomain1.example.com subdomain2.example.com subdomain3.example.com проблемный домен.example.com
Которые действительно размещены в:
var / www / default.example.com var / www / subdomain1.example.com var / www / subdomain2.example.com var / www / subdomain3.example.com var / www / problemdomain.example.com
Иногда люди из некоторых интернет-провайдеров не могут получить доступ к одному из доменов, сегодня это
проблемный домен.example.com
ОДНАКО эти пользователи МОГУТ маршрутизировать на сервер через его IP-адрес и получать корневую целевую страницу сервера по умолчанию:
123.123.123.123
КОТОРЫЙ переводит их на default.example.com
Примечание. Каталог, в который я хочу, чтобы они попали, находится НАД текущим каталогом, а просмотр каталога отключен.
ИДЕЯ 1: Если они могут получить IP-адрес сервера, и я создаю целевой каталог (default.example.com/foo), могу ли я каким-то образом перенаправить их в другую папку на сервере, тем самым доставив их в нужное место? Как бы я это сделал? * Помните, что DNS не работает, поэтому я бы подумал, что перенаправление 301 не сработает, потому что он просто скажет их браузеру искать 'problemdomain.example.com', который они не могут решить.
Перефразируя словесный язык: Есть ли способ сказать apache: «Эй, если кто-то запрашивает каталог 'foo' на целевой веб-странице главного сервера по умолчанию:
123.123.123.123/foo
ТОГДА перенесите их на этот другой виртуальный хост на сервере
проблемный домен.example.com/foo
Или есть что-то вроде использования:
123.123.123.123:virtualhostname
или какая-то другая «сила» для этого? Для меня нереально просить конечных пользователей, у которых есть проблемы, добавлять записи о хостах в свою систему. Просто так, чтобы в тех редких случаях, когда ДЕЙСТВИТЕЛЬНО возникают проблемы, я могу сказать что-то более полезное, чем «просто попробуйте компьютер с другим подключением к сети».
Большое спасибо за любую помощь.
Я не думаю, что вы можете делать то, что хотите, автоматически. Когда клиент хочет подключиться к хосту, он решает проблему domain.example.com на IP-адрес. Он связывается с сервером по IP-адресу. В рамках разговора он передает заголовок Host
Host: problemdomain.example.com
Сервер использует заголовок Host, чтобы решить, как направить запрос на соответствующий виртуальный хост.
В вашем случае запрос к резолверу не выполняется, поэтому клиент не знает хоста для связи с сервером, поэтому он не может, и это все.
Да и нет. Ваш первый пример разговорного языка прост - вы можете использовать перезапись URL. Второй пример разговорного языка, вероятно, невозможен, но в любом случае в нем нет необходимости.
Однако это зависит от того, является ли один и тот же домен проблемным каждый раз - если это так, самое простое решение - поставить проблемный домен первым в списке. Apache по умолчанию использует первый домен, указанный для этого IP-адреса, если он не получает информацию о хосте. Если проблемный домен отличается, вы застряли в получении большего количества IP-адресов и размещении одного домена на каждом IP (что противоречит цели виртуальных хостов на основе имен), возвращая бремя ответственности на клиентское соединение (которое, как вы сказали, вы 'хотел бы избежать), или иметь домен "по умолчанию", не содержащий ничего, кроме простой целевой страницы, которая имеет ссылки на определенные страницы, которые можно отличить по имени или переписав URL. Какой из них доставит вам меньше всего длительных головных болей?