Apache - поддомен, mod_rewrite и virtualdocumentroot - PullRequest
2 голосов
/ 01 ноября 2010

Может кто-нибудь подсказать, как мне добиться следующего (я не смог приготовить решение, используя mod_rewrite или virtualdocumentroot) ::

1) Разрешить любой поддомен на моем веб-сайте (* .mysite.com не должен выдавать ошибку 404) И

2) Убедитесь, что URL, который видит пользователь в браузере, соответствует введенному им.

3) Без перенаправлений

(Таким образом, если пользователь вводит avalidsubdomain.mywebsite.com, страницы должны обслуживаться из соответствующего каталога. В настоящее время меня не волнует структура каталога, которую мне нужно сохранить. Все хорошо, пока оно работает. с другой стороны, если он наберет что-то thatdoesnotexist.mywebsite.com, он не должен получать 404, а вместо этого должен быть переведен на пользовательскую страницу на веб-сайте).

Например, посмотрите, что любой поддомен на blogspot.com будет работать - например, http://dsadsadsdsadsd.blogspot.com/. (Конечно, Google - это Google, и, черт возьми, они могут написать свой собственный веб-сервер). Но я уверен, что что-то простое в Apache может быть сделано.

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

2) Из того, что я прочитал в различных потоках, я могу использовать mod_rewrite для правила поддоменов catchall, но затем URL-адрес, который видит пользователь в броузере, не остается прежним.

спасибо!

ура

* * 1 022 JP

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

mod_rewrite регулярное выражение (слишком много перенаправлений)

Ответы [ 4 ]

1 голос
/ 01 ноября 2010

Сценарий, который вы хотите настроить, можно реализовать с помощью mod_vhost_alias для Apache httpd.

Вам просто нужно создать виртуальный хост по умолчанию для перехвата несуществующих поддоменов, см. Подробное обсуждение соответствия виртуальных хостов для деталей.

Пример:

<VirtualHost _default_:80>
  ServerName example.com
  DocumentRoot /srv/www/custom_page
  # ...
</VirtualHost>

UseCanonicalName Off
VirtualDocumentRoot /srv/www/%1/%2+
0 голосов
/ 07 января 2014

в вашем httpd.conf добавьте

<VirtualHost *:80>
        ServerName default
        ServerAlias *
        VirtualDocumentRoot /htdocs/%-2.0.%-1/%-3
</VirtualHost>

, который направит ваш домен на www.example.com на /htdocs/example.com/www/

Затем добавьте .htaccessфайл в вашей папке rooit: /htdocs/example.com/.htaccess, который включает: Теперь каждый несуществующий домен будет перенаправлен на www с кодом состояния 301 (Permantly Moved).Вы можете изменить WWW на любое другое.

# Enable Rewrite Engine
RewriteEngine on

# Rewrite all non-existing sites to www.
RewriteCond %{HTTP_HOST} example\.com$
RewriteRule ^.*$ http://www.example.com%{REQUEST_URI} [R=301,L]

Надеюсь, это поможет вам.

0 голосов
/ 06 июля 2012

За что стоит:

Я предложил подход, который использует mod_rewrite вместе с VirtualDocumentRoot /.../%0 для перенаправления несуществующих поддоменов в соответствующие корневые домены. Это действительно обновляет URL клиента, но вы можете использовать флаг [P] RewriteRule, чтобы скрыть это. Также было бы тривиально перенаправить на страницу-заполнитель, как в вашем примере.

После установки вам не нужно редактировать какие-либо параметры конфигурации для добавления или удаления доменов или поддоменов.

0 голосов
/ 01 ноября 2010

То, что вы описываете, может быть сделано с помощью DNS, и вам придется использовать подстановочные знаки , чтобы выполнить его.

...