виртуальные хосты отображаются в структуру каталогов - PullRequest
2 голосов
/ 13 января 2012

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

В основном у меня много виртуальных хостов, указывающих на мой сервер, и файловая структура, на которую они указывают для своего DocumentRootнепротиворечиво ... например.

www.mydomain.com -> /home/blah/vhosts/mydomain.com/www/public
abc.mydomain.com -> /home/blah/vhosts/mydomain.com/abc/public

www.another.co.uk -> /home/blah/vhosts/another.co.uk/www/public
def.another.co.uk -> /home/blah/vhosts/another.co.uk/def/public

Если возможно, мне также нужно перенаправить не-www. * на www. *, но с учетом возможности субдомена, так что:

  • mydomain.com перенаправляется на www.mydomain.com
  • abc.mydomain.com is НЕ перенаправляется на www.mydomain.com, как это обрабатывается с определением выше (из-за структуры каталогов)

Это вообще возможно?

1 Ответ

1 голос
/ 13 января 2012

Вот что я делаю для всех моих vhosts: я использую Apache writemap .

Создайте новый файл "partner.txt" с такими партнерами:

0 www
1 partner1
2 partner2
3 partner1

Затем скомпилируйте его и добавьте его в свои переписывающие устройства, чтобы узнать, является ли префикс партнером или нет, например:

<VirtualHost *>
    ServerAdmin webmaster@mydomain.fr
    DocumentRoot "/web/htdocs/olivier/mydomain.fr/dev/website"
    ServerName mydomain.fr
    ServerAlias *.mydomain.fr
    ErrorLog "/web/logs/mydomain.error.log"
    CustomLog "|/opt/httpd/bin/rotatelogs /web/logs/mydomain.fr/access_log.%Y-%m-%d-%H_%M_%S.log 5M" combined
    ErrorDocument 404 /404.php

    RewriteEngine On
    # trying to hack = redirect:
    RewriteRule (.*)setup.php http://disneyland.fr/ [NC,R,L]
    RewriteRule (.*)admin(.*) http://disneyland.fr/ [NC,R,L]

    # if your host doesn't begin with "www" add it and redirect:
    RewriteCond %{HTTP_HOST} ^mydomain\.(fr|com|net|org|eu) [NC]
    RewriteRule (.*) http://www.mydomain.%1$1 [QSA,R=301,L]

    RewriteMap partners \
      dbm:/web/htdocs/olivier/mydomain.fr/rewriterules/partners.map

    # test if known partner:
    RewriteCond %{HTTP_HOST} (([a-zA-Z0-9\-]+)\.)mydomain.com$
    RewriteRule (.*) - [QSA,E=PARTNER:${templates:%1|notfound}]

    # if partner not found or empty, 404:
    RewriteCond %{ENV:PARTNER} ^$ [OR]
    RewriteCond %{ENV:PARTNER} notfound
    RewriteRule .* - [R=404,L]
</VirtualHost>
...