apache mod_rewrite variável nomes de host com um redirecionamento?

2

Eu tenho um servidor de teste (webtest.example.com) e um servidor ativo (www.example.com).

Eu também tenho example.org, example.net, etc. Eu quero que esses redirecionem para example.com. Eu também quero que quaisquer entradas não-www redirecionem para www.

Basicamente, eu só quero saber se existe uma maneira mais eficiente (isto é, menos linhas) de lidar com isso?

RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{HTTP_HOST} !^webtest\.example
RewriteRule ^(.*)$ http://www.example.com%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^webtest\.example\.com$
RewriteCond %{HTTP_HOST} ^webtest\.example
RewriteRule ^(.*)$ http://webtest.example.com%{REQUEST_URI} [L,R=301]

... parece que haveria uma maneira de combinar os dois blocos em um só bloco.

    
por D.Tate 23.01.2015 / 21:33

1 resposta

2

Comece com regras que façam o que você quer e combine-as. Na pergunta você tem 3 requisitos e regras que cobrem apenas dois deles - há uma regra faltando.

Uma dica importante é escrever regras que usem uma correspondência positiva (começa com foo) e não uma correspondência negativa (inicia com qualquer coisa exceto foo), caso contrário, são necessárias exclusões e você deve adicionar ao seu conjunto de regras no futuro. quebrar.

Redirect example.notcom para www.example.com

Existem muitos exemplos para isso, neste caso particular:

RewriteCond %{HTTP_HOST} ^example
RewriteRule ^ http://www.example.com%{REQUEST_URI} [R=301,L]

Não importa se são example.com , example.net ou example.org - todos começam com o exemplo - correspondem a solicitações de domínio não-www e redirecionam para www.example.com

Redirecionar www.example.notcom para www.example.com

Para isso, use um lookahead negativo para excluir www.example.com :

RewriteCond %{HTTP_HOST} ^www\.example\.(?!com)$
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]

Ou seja. corresponde a qualquer host começando com www.example, que não termina com .com

Redirecionar webtest.example.notcom para webtest.example.com

Da mesma forma, usando um lookahead negativo, isso pode ser normalizado:

# capture the subdomain, and match hosts that don't end with .com
RewriteCond %{HTTP_HOST} ^webtest\.example\.(?!com)
RewriteRule ^ http://webtest.example.com%{REQUEST_URI} [L,R=301]

Ou seja. corresponde a qualquer host que comece com webtest.example, que não termina com .com

As regras podem ser combinadas?

Os que estão em um subdomínio podem ser:

RewriteCond %{HTTP_HOST} ^(www|webtest)\.example\.(?!com)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [L,R=301]

O primeiro, no entanto, não pode ser facilmente incluído aqui (pelo menos, não consigo pensar em uma maneira trivial de fazê-lo).

Todos juntos:

O resultado final é, portanto:

# Redirect no-www requests to www.example.com
RewriteCond %{HTTP_HOST} ^example
RewriteRule ^ http://www.example.com%{REQUEST_URI} [R=301,L]

# Redirect requests on the wrong tld to .com
RewriteCond %{HTTP_HOST} ^(www|webtest)\.example\.(?!com)
RewriteRule ^ http://%1.example.com%{REQUEST_URI} [L,R=301]
    
por 23.01.2015 / 21:51