2012-01-13 5 views
2

Я прочитал массовую помощь виртуального хозяина на 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 является НЕ перенаправлены www.mydomain.com как это обрабатывается с определением выше (из-за структуры каталогов)

Является ли это вообще возможно?

ответ

1

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

Создать новый файл «partner.txt» с партнерами, как это:

0 www 
1 partner1 
2 partner2 
3 partner1 

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

<VirtualHost *> 
    ServerAdmin [email protected] 
    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> 
+1

Это может быть часть решения (+1), но это может быть слишком много вашего решения, а не решение его проблемы. Например, он должен обрабатывать несколько разных доменов. Так что это может потребовать дальнейших объяснений. Например, каков эффект установки переменной env PARTNER в соответствующей перезаписи? – regilero

+0

Эй, ты прав, я ошибся в своем ответе, исправил ... Тогда объяснение: Эффект установки переменной env PARTNER в соответствующей перезаписи помогает узнать, действителен ли префикс. И.Е. если у вас есть партнер1, partner2 и partner3, а кто-то типа «partner47.mydomain.com», то вы узнаете, что partner47 не является партнером, потому что «PARTNER» будет иметь значение по умолчанию = «notfound» => последний перезаписывающий файл выполнит 404 для незнакомых партнеров. Мы могли бы сделать перенаправление на 'www.mydomain.com', хотя –

Смежные вопросы