
Eu li tópicos SO sobre o assunto. No entanto, eles se aplicam apenas a hosts únicos.
Gostaria de ter uma regra uniforme para todos os servidores dos domínios atuais e futuros.
Basicamente, quero remover www de todas as solicitações e deixar apenas o nome de domínio acessível.
O Apache também serve HTTPS, então como aplicar isso a todos?
Obrigado!
http://www.example.com >> http://example.com
https://www.example.com >> https://example.com
Maria
Responder1
O que você está descrevendo é (aparentemente) impossível de usar mod_rewrite
, até certo ponto.
As configurações de vários "níveis" não são empilhadas mod_rewrite
, portanto, um conjunto de regras definido na configuração do servidor principal não será automaticamente importado e aplicado a uma solicitação delegada a um <VirtualHost>
.
No entanto, supondo que você tenha que atribuir o <VirtualHost>
em algum momento de qualquer maneira, se você não planeja ter quaisquer outras regras dentro do <VirtualHost>
corpo (se elas estiverem em .htaccess
uma <Directory>
seção, tudo bem), você pode brincar com o seguindo.
Na configuração principal, pegaremos meuresposta a esta pergunta relacionadae aplique:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]
Então, em cada uma de nossas <VirtualHost>
seções, podemos "importá-la" usando oRewriteOptions
diretiva:
RewriteEngine On
RewriteOptions inherit
Como alternativa, é claro, você poderia simplesmente copiar o conjunto de regras para cada um deles <VirtualHost>
em sua totalidade, mas isso manteria o conjunto de regras relevante em um único local.
Observe que a razão pela qual sugiro não ter regras adicionais <VirtualHost>
diretamente neste caso é que as regras herdadas estão incluídasdepoistudo o que você definiu no nível atual da configuração, o que pode ter efeitos colaterais indesejados.