sites-available (apache) и httpd.conf для WAMP - что делает XXXXX.domain.com автоматически прямым

В настоящее время у меня есть это в моем файле httpd.conf в WAMP:

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
    ServerAlias *.dev.co.uk
    UseCanonicalName Off
    VirtualDocumentRoot D:/wamp/www/%1/httpdocs
</VirtualHost>

Я создал каталог foo.bar, а затем попробовал http://foo.bar.dev.co.uk и я получаю это:

не обнаружена

Запрошенный URL / не найден на этом сервере.

Я хочу, чтобы эта настройка работала на моем локальном сервере apache, а также на моем сервере wamp (я думаю, что синтаксис немного отличается). Если мне нужно дать больше информации, оставьте комментарий, и я обновлюсь.


person udjamaflip    schedule 04.06.2011    source источник
comment
Кстати, вы могли бы получить больше ответов, если бы разместили это на webmasters.stackexchange.com или даже на serverfault.com. Я пытался перенести ваш вопрос, но не смог из-за назначенного вами вознаграждения. Я рискнул получить ответ только потому, что вы не получали никаких ответов почти через 2 недели.   -  person Shawn Chin    schedule 20.06.2011


Ответы (2)


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

Согласно документам по интерполяции имен каталогов, казалось бы, ваша проблема заключается в том, что вы используете %1, который будет соответствовать только "foo" для http://foo.bar.dev.co.uk.

Чтобы найти "foo.bar", попробуйте:

VirtualDocumentRoot D:/wamp/www/%1.0.%2.0/httpdocs

%1 соответствует "foo", а %2 соответствует "bar". Дополнение .0, добавленное к каждому формату, позволяет нам включать точку между foo и bar (поскольку . также используется как оператор для извлечения подстроки совпадающих слов).

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

Обновлять

В ответ на:

«Это действительно делает foo.bar.dev.co.uk, однако, к сожалению, это останавливает работу foo.dev.co.uk, есть идеи?»

Использование интерполяции имен каталогов для сопоставления псевдонимов с неопределенным количеством поддоменов является сложной задачей.

Самый простой подход - просто использовать %0 и иметь каталоги, названные по полному имени домена.

VirtualDocumentRoot D:/wamp/www/%0/httpdocs

Это будет соответствовать каталогам D:/wamp/www/foo.bar.dev.co.uk/httpdocs и D:/wamp/www/foo.dev.co.uk/httpdocs.

Если у вас есть ограниченное подмножество возможных доменов, можно разработать более конкретное решение. Например, если у вас есть:

  • "foo.dev.co.uk"
  • "bar.dev.co.uk"
  • "foo.bar.dev.co.uk"
  • .. и другие домены в виде "X.Y.dev.co.uk"

тогда вы можете обработать "foo" и "bar" предшествующего блока VirtualHost перед обработкой других доменов.

<VirtualHost 127.0.0.1>
    ServerAlias foo.dev.co.uk 
    ServerAlias bar.dev.co.uk
    UseCanonicalName Off
    VirtualDocumentRoot D:/wamp/www/%1/httpdocs
</VirtualHost>

<VirtualHost 127.0.0.1>
    ServerAlias *.dev.co.uk
    UseCanonicalName Off
    VirtualDocumentRoot D:/wamp/www/%1.0.%2.0/httpdocs
</VirtualHost>
person Shawn Chin    schedule 13.06.2011
comment
Это делает foo.bar.dev.co.uk, однако, к сожалению, это останавливает работу foo.dev.co.uk, есть идеи? Исходная ошибка была: Файл не существует: D: / wamp / www / foo Новая ошибка: Файл не существует: D: /wamp/www/foo.dev - person udjamaflip; 15.06.2011
comment
Я позволил ему пройти, чтобы дать вам 50% вознаграждения, поскольку вы помогли мне найти потенциальное решение, однако реальное решение - использовать mod_rewrite в httpd.conf, я думаю, я еще не доработал это тем не менее, если вы знаете способ, я более чем счастлив поместить ваш ответ в качестве окончательного. - person udjamaflip; 20.06.2011
comment
@udjamaflip Если я неправильно понял ваши требования, я не понимаю, как mod_rewrite может помочь упростить решение. В вашем заголовке упоминается перенаправление, но в теле вопроса говорится о сопоставлении имен хостов с корнями документов. Если вы можете подробнее рассказать о том, чего пытаетесь достичь, я постараюсь помочь. - person Shawn Chin; 20.06.2011

Некоторые комментарии, которые могут поддержать:

1) чтобы разрешить IP-адрес вашего localhost
Вам нужно, чтобы ваш браузер мог найти то, что находится на 127.0.0.1. Итак, если это не сделано, сначала отредактируйте файл hosts на компьютере с ОС Windows C: \ Windows \ System32 \ drivers \ etc \ hosts:

127.0.0.1 foo.bar.dev.co.uk

При условии, что невозможно использовать подстановочные знаки в этом файле хоста. Для этого вы должны установить this.

2) порт:
Убедитесь, что ваш сервер прослушивает порт http по умолчанию, например, не забудьте добавить эту директиву в свой файл httpd.conf (как я не видел):

Listen 80

3) Контроль:
Поскольку вы используете директиву NameVirtualHost XXX.XXX.XXX.XXX, убедитесь, что она точно соответствует директива NameVirtualHost. Похоже, это так и есть в вашем посте.

4) Путь:
Возможно, это глупое замечание с моей стороны, как пользователя Linux, но я думал, что ОС Windows требует для пути обратную косую черту, а не косую черту. Но я могу определенно ошибаться в этом и не хочу никого вводить в заблуждение. Но поскольку «все директивы в этом модуле Directory Name Interpolation интерполируют строку в имя пути, я бы проверил результат Полученной интерполированной строки. Пожалуйста, смотрите следующий пункт.

5) Заполнители:
Убедитесь, что модуль псевдоним vhost загружен в ваш wamp. Я также рекомендую вам добавить директиву в свой vhost, чтобы вы могли проверять в журналах, какой требуется интерполированный URL, найти, что не так, и соответственно исправить настройку apache:

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common 

6) Существующее решение ...
У существующей проблемы всегда есть решения: см. там

Как только вы проверите эти моменты, я думаю, решение появится в ближайшее время.

person hornetbzz    schedule 16.06.2011