Подтвердить что ты не робот

Поддомены подстановочных знаков

Я знаю, что раньше было несколько потоков, но я пробовал абсолютно все предлагаемое (что я мог найти), и ничто не работало для меня до сих пор...

Имея это в виду, вот что я пытаюсь сделать:

Во-первых, я хочу разрешить пользователям публиковать страницы и предоставлять им каждый из поддоменов по своему выбору (например: user.mysite.com). Из того, что я могу собрать, лучший способ сделать это - сопоставить user.mysite.com с mysite.com/user с mod_rewrite и .htaccess - это правильно?

Если это правильно, может ли кто-нибудь дать мне явные инструкции о том, как это сделать?

Кроме того, я делаю все свое развитие локально, используя MAMP, поэтому, если кто-нибудь может сказать мне, как настроить мою локальную среду для работы одинаково (я читал это сложнее), я бы очень ценить это. Честно говоря, я пробовал все безрезультатно, и, поскольку это мой первый раз, когда я делал что-то подобное, я полностью потерялся. Большое спасибо за любую помощь!

Обновление: Некоторые из этих ответов были ДЕЙСТВИТЕЛЬНО полезны, но для системы, которую я имею в виду, вручную добавление субдомена для каждого пользователя не является вариантом. Я действительно спрашиваю, как это сделать "на лету" и перенаправить wildcard.mysite.com на mysite.com/wildcard - способ, которым Tumblr настроен, является прекрасным примером того, что я хотел бы сделать. Еще раз спасибо!

4b9b3361

Ответ 1

Что касается настройки подстановочного поддомена DNS, это будет функцией вашего хостинг-провайдера DNS. Это будут разные шаги, в зависимости от того, какой у вас хостинг-провайдер и для них будет лучшим вопросом.

Как только вы установили это с хостом DNS, из вашего веб-приложения вы действительно просто переписываете URL-адреса, что может быть сделано с помощью какого-то модуля для самого веб-сервера, такого как isapi rewrite, если вы находитесь на IIS (это был бы предпочтительный маршрут, если это было возможно). Вы также можете обрабатывать переписывание на уровне приложения (например, используя маршрутизацию, если на ASP.NET).

Вы должны переписать URL-адрес, чтобы http://myname.domain.com стал http://domain.com/something.aspx?name=myname или что-то в этом роде. Оттуда вы просто обрабатываете его так, как если бы значение myname находилось в строке запроса как обычно. Имеет ли это смысл? Надеюсь, я не понял, что вам нужно.

Изменить:

Я не предлагаю, чтобы вы создали субдомен для каждого пользователя, но вместо этого создавали поддомен подстановки для самого домена, поэтому Nothing.domain.com(в основном *.domain.com) отправляется на ваш сайт. У меня есть настройка нескольких доменов с mydomain. Их инструкции по настройке этого типа таковы:

Да, вы можете настроить wild card, но он будет работать, только если вы настроите его как запись A. Подстановочные знаки не работают с именем C. Чтобы использовать подстановочный знак, вы используйте символ astericks '*'. Для Например, если вы создаете и A Record используя wild card,.domain.com, все, что вводится в место где находится '', разрешит к указанному IP-адресу. Так что если вы введите "www", "ftp", "сайт" или что-либо еще до имени домена, он всегда будет решать IP адрес

У меня есть некоторые, которые настроены именно таким образом, имея *.domain.com перейти на мой сайт. Затем я могу прочитать базовый URL-адрес в своем веб-приложении, чтобы увидеть, что ryan.domain.com - это то, к чему в настоящее время обращался, или что bill.domain.com - это то, что было использовано. Тогда я могу:

  • Использовать переписывание URL-адресов, чтобы субдомен становился частью строки запроса OR
  • Просто прочитайте значение хоста из URL-адреса доступа и выполните некоторую логику, основанную на этом значении.

Это имеет смысл? У меня есть несколько сайтов, настроенных именно таким образом: создайте подстановочный знак для домена с хостом DNS, а затем просто прочитайте хост или базовый домен из URL-адреса, чтобы решить, что отображать на основе субдомена (который фактически был именем пользователя )

Изменить 2:

Нет способа сделать это без записи DNS. "Мир онлайн" должен знать, что name1.domain.com, name2.domain.com,..., nameN.domain.com все идут на IP-адрес вашего сервера. Единственный способ сделать это - с соответствующей записи DNS. Вы должны добавить подстановочную запись DNS для своего домена с помощью хоста DNS. Тогда это просто вопрос о том, как вы читаете субдомен с URL-адреса и предпринимаете соответствующие действия в своем коде.

Ответ 2

Лучшее, что нужно сделать, если вы работаете * AMP - это делать то, что предлагает Томас и делать виртуальные хосты в Apache. Вы можете сделать это с помощью или без перенаправления, которую вы описываете.

Виртуальные хосты

Скорее всего, вам захочется сделать виртуальные хосты на основе имен, так как это проще всего настроить и требуется только один IP-адрес (так будет также легко настраивать и тестировать на вашей локальной машине MAMP). Виртуальные хосты на основе IP лучше в некоторых других отношениях, но у вас должен быть IP-адрес для каждого домена.

Эта страница Wikipedia обсуждает различия и ссылки на хороший базовый подход к тому, как делать основанные на имени vhosts внизу.

На вашем локальном компьютере для тестирования вам также нужно будет настроить поддельные имена DNS в /etc/hosts для ваших поддельных имен тестовых доменов. т.е. если вы используете Apache на локальном хосте и настроили vhost1.test.domain и vhost2.test.domain в своих конфигурациях Apache, вы просто добавили бы эти домены в строку 127.0.0.1 в /etc/hosts после localhost:

127.0.0.1 localhost vhost1.test.domain vhost2.test.domain

После того, как вы сделали редактирование /etc/hosts и добавили конфигурацию виртуального хоста на основе имени в свои файлы конфигурации Apache, перезапустите Apache и ваши тестовые домены.

Перенаправление с помощью mod_rewrite

Если вы хотите сделать переадресацию с помощью mod_rewrite (так, чтобы user.example.com напрямую не размещался и вместо этого перенаправлялся на example.com/user), вам также понадобится сделать RewriteCond для соответствия субдомену и перенаправлению это:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]

Вы можете поместить это в .htaccess или в свою основную конфигурацию Apache.

Вам нужно будет добавить пару правил, таких как последние два для каждого поддомена, который вы хотите перенаправить. Или вы можете захватить субдомен в RewriteCond, чтобы иметь возможность использовать одно правило подстановки для перенаправления *.example.com на example.com/ * - но это плохо пахнет мне с точки зрения безопасности.

Все вместе, vhosts и перенаправление

Лучше быть более явным и настроить раздел конфигурации виртуального хоста для каждого имени хоста, который вы хотите прослушать, и поместить правила перезаписи для каждого из этих имен хостов в его конфигурацию виртуального хоста. (Это всегда более безопасно и быстро, чтобы помещать такие вещи в конфигурацию Apache, а не .htaccess, если вы можете помочь ему -.htaccess замедляет производительность, потому что Apache постоянно чистит файловую систему для файлов .htaccess и репарационирует их, и это менее безопасно, потому что они могут быть испорчены пользователями.)

Все вместе, конфигурация vhost внутри ваших конфигураций Apache будет:

NameVirtualHost 127.0.0.1:80

# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /www/siteroot
  # etc.
</VirtualHost>

# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost1.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>

# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost2.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>

Ответ 3

Я понимаю, что я довольно поздно отвечаю на этот вопрос, но у меня была та же проблема в отношении решения для локального развития. В еще один поток SO я нашел лучшие решения и подумал, что я поделюсь ими для тех, у кого есть тот же вопрос в будущем:

VMware принадлежит домену дикой карты, которая разрешает любой поддомен до 127.0.0.1:

vcap.me resolves to 127.0.0.1
www.vcap.me resolves to 127.0.0.1

или для большей универсальности 37 Сигналы владеют доменом для сопоставления любого поддомена с любым заданным IP-адресом в определенном формате:

127.0.0.1.xip.io resolves to 127.0.0.1
www.127.0.0.1.xip.io resolves to 127.0.0.1
db.192.168.0.1.xip.io resolves to 192.168.0.1

см. xip.io для получения дополнительной информации

Ответ 4

Я на Ubuntu 16.04, и с 14.04 я использую решение, предоставленное Dave Evans здесь, и это отлично работает для меня.

  • Установите dnsmasq

    sudo apt-get install dnsmasq
    
  • Создайте новый файл localhost.conf под /etc/dnsmasq.d dir со следующей строкой

    #file /etc/dnsmasq.d/localhost.conf
    address=/localhost/127.0.0.1
    
  • Измените /etc/dhcp/dhclient.conf и добавьте следующую строку

    prepend domain-name-servers 127.0.0.1;
    

    (Вероятно, вы увидите, что эта строка уже существует, и вам просто нужно раскомментировать ее.)

  • Последний перезапуск службы

    sudo systemctl restart dnsmasq
    sudo dhclient
    

Наконец, вы должны проверить, работает ли он.

dig whatever.localhost

Примечание:

Если вы хотите использовать его на своем веб-сервере, вам нужно просто изменить 127.0.0.0 на ваш фактический IP-адрес.

Ответ 5

Вы найдете так много документов для размещения поддоменов диких карт на сервере производства или промежуточного уровня. Вот ссылка, где я нашел, как применять поддомены подстановочных знаков на локальном и wamp-сервере.

http://info4admins.com/wildcard-domains-dns-and-local-wamp-for-website-development/

Ответ 6

Во-первых, я хочу разрешить пользователям публиковать страницы и давать им субдомен по своему выбору (например: user.mysite.com). Из того, что я могу собрать, лучший способ сделать это - это map user.mysite.com для mysite.com/user с mod_rewrite и .htaccess - это что правильно?

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

Синтаксис выглядит примерно так:

<VirtualHost *:80>
    DocumentRoot /var/www/user
    ServerName user.mysite.com
    ...
</VirtualHost>

Ответ 7

Из того, что я видел на многих веб-хостах, они настраивают виртуальный хост на apache.

Итак, если ваш сайт www.mysite.com обслуживается с /var/www, вы можете создать папку для каждого пользователя. Затем сопоставьте виртуальный хост с этой папкой.

При этом работают как mysite.com/user, так и user.mysite.com.

Что касается вашей тестовой среды, если вы работаете в Windows, я бы предложил отредактировать ваш файл HOSTS для сопоставления mysite.com на локальном ПК (127.0.0.1), а также с любыми субдоменами, которые вы настроили для тестирования.

Ответ 8

Мне нужно было сделать то же самое для одного из моих сайтов. Вы можете выполнить следующие шаги.

  • Если у вас есть cPanel на вашем сервере, создайте субдомен *, если нет, вам придется настроить запись A в вашем DNS (для BIND см. http://ma.tt/2003/10/wildcard-dns-and-sub-domains/). На вашем dev. серверу было бы намного лучше обмануть субдомены, добавив их в ваш файл hosts.

  • (Если вы использовали cPanel, вам не придется это делать). Вам нужно добавить в файл apache vhosts soemthing, как показано ниже. Это во многом зависит от того, какой тип сервера (общий или нет) вы используете. СЛЕДУЮЩИЙ КОД НЕ ПОЛНЫЙ. ЭТО ТОЛЬКО НАПРАВЛЯТЬ НАПРАВЛЕНИЕ. ПРИМЕЧАНИЕ. ServerAlias example.com *.example.com важно.

    <VirtualHost 127.0.0.1:80>  
            DocumentRoot /var/www/  
            ServerName example.com  
            ServerAlias example.com *.example.com  
    </VirtualHost>
    
  • Далее, поскольку вы можете использовать PHP script, чтобы проверить заголовок "Host" и узнать субдомен и соответствующим образом обслуживать контент.