Configuração do Virtual DocumentRoot para WWW e não WWW - SEM redirecionar

1

Pesquisei muito, mas não consegui encontrar uma resposta

Quando você configura hosts virtuais dinâmicos no Apache, você faz algo assim:

  RewriteEngine On

  # a ServerName derived from a Host: header may be any case at all
  RewriteMap lowercase int:tolower

  ## deal with normal documents first:
  # allow Alias /icons/ to work - repeat for other aliases
  RewriteCond %{REQUEST_URI} !^/icons/
  # allow CGIs to work
  RewriteCond %{REQUEST_URI} !^/cgi-bin/
  # do the magic
  RewriteRule ^/(.*)$ /var/www/domains/${lowercase:%{SERVER_NAME}}/html/$1

  ## and now deal with CGIs - we have to force a MIME type
  RewriteCond %{REQUEST_URI} ^/cgi-bin/
  RewriteRule ^/(.*)$ /var/www/domains/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi]

O problema é que você precisa criar duas pastas: example.com e www.example.com (ou crie um e um link simbólico para ele)

O que seria uma regra de reescrita que poderia evitar a necessidade de criar essas duas pastas? (ou o link simbólico)

A questão também se aplica ao NGINX

Como esta pergunta: Apache vhost com e sem 'www'? Eu não quero usar * .example.com

    
por MauricioOtta 26.04.2013 / 10:17

1 resposta

1

Adicione outra regra de reescrita, que deve estar antes da outra no arquivo de configuração:

RewriteCond %{SERVER_NAME}  ^www\.(.*)
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%1}/docs/$1

O que você está fazendo aqui é combinar o nome do domínio com um regexp. Se o nome de domínio começar com "www.", Tudo depois de "www." será armazenado na variável% 1. Na próxima linha, você está reutilizando essa variável em vez de todo o ServerName.

    
por 26.04.2013 / 10:40