Por favor reveja / melhore o meu plano .htaccess não-www para www reescrever

1

Executando multisite do WP com clientes capazes de usar seu próprio nome de domínio. Funciona muito bem - exceto no caso em que o cliente não usa meus servidores de nomes e simplesmente tem um registro A apontando para o endereço IP estático do WP.

Isso acontece às vezes quando o DNS do cliente tem uma tonelada de registros de serviço (por exemplo, o Office 365), é mais seguro deixar o DNS lá.

Quando controlo DNS, posso alias não-WWW a WWW, o que torna o WP multisite feliz. Quando o cliente está apenas usando o ponteiro de registro A, o WP multisite tropeça na solicitação não WWW recebida e aterrissa na página de inscrição do multisite. Ele realmente precisa do 'www', para funcionar bem (infelizmente).

Eu resolvo para cada cliente fazendo isso no .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*) http://www.example.com/$1 [L,R=301]
</IfModule>

que até agora parece funcionar muito bem.

Perguntas:

  1. Esse método parece razoável?

  2. Existe uma maneira melhor de lidar com isso, considerando o problema que estou vendo?

  3. Se eu quisesse fazer isso reescrever o genérico para lidar com qualquer domínio de entrada (contanto que o domínio não inclua meu nome de domínio multisite base!) - alguém poderia me mostrar como formar a condição / regra?

Eu meio que gosto de codificar o domínio real porque isso garante que nada mais é tocado, mas eu imagino que uma vez que eu tenha algumas centenas, isso pode se tornar bobo.

    
por C C 06.01.2017 / 14:37

2 respostas

1

When I control DNS, I can alias non-WWW to WWW, which makes WP multisite happy.

Não tenho certeza do que você quer dizer com "alias" aqui, mas presumivelmente você precisa implementar algum tipo de redirecionamento canônico não-WWW para WWW, mesmo quando você controla o DNS?

  1. Does this method seem reasonable?

Portanto, esse tipo de redirecionamento parece razoável. Criando VirtualHost adicional parece ser muito mais trabalho. (?)

  1. Is there a better way to handle this, given the issue I am seeing?

Conforme mencionado nos comentários, o cliente pode definir um registro A em www.example.com e só pode ter o site acessível a partir do subdomínio www . Mas isso é provavelmente indesejável. Assim, de qualquer forma, você terá que resolver a canonização de domínio no seu final, o que envolverá um redirecionamento 301.

  1. If I wanted to make this re-write generic to handle any incoming domain (as long as that domain does not include my base multisite domain name!) -- could someone show me how to form the condition/rule?

Na configuração do seu servidor, você poderia fazer algo como o seguinte, para lidar com qualquer domínio, mas excluir o domínio base :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^base-domain-to-exclude\.com [NC]
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

Se o HTTP_HOST não começar com www. , redirecione para o mesmo host com www. prefixado.

Você também não precisa do wrapper <IfModule> aqui. Você já sabe que o mod_rewrite está habilitado no seu servidor, mas mesmo assim, o <IfModule> wrapper é necessário apenas se o seu site se destina a "funcionar" sem o mod_rewrite.

    
por 06.01.2017 / 17:01
0

Você poderia simplesmente adicionar um virtualhost separado para example.com que simplesmente serve um 301 enviando o cliente para www.example.com .

    
por 06.01.2017 / 15:48