Por que isso faz com que meu site seja redirecionado para secure.secure. * root domain * .com?

1

Estou recriando minha pergunta do Stack Overflow porque este é realmente o lugar mais apropriado para fazer essa pergunta. A pergunta original está abaixo.

Aqui está a regra de regravação que estou usando:

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{HTTP_HOST} !^(www.)secure.\ [NC]
RewriteRule (.*) https://secure.%{HTTP_HOST}%{REQUEST_URI} [R,L]

Essa regra deve ser aplicada se a porta for 443 (porta SSL) e se o domínio solicitado não iniciar com seguro ou www.secure.

Em vez disso, ele redireciona para secure.secure e retorna um erro 404. Como alternativa, se eu remover o seguro da regra de reescrita, crie

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{HTTP_HOST} !^(www.)secure.\ [NC]
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Eu recebo muitos erros de redirecionamento.

Eu admito, não sou um especialista em mod_rewrite, mas me considero capaz de trabalhar com referência à documentação. Sobre isso, no entanto, estou perplexo. Obrigado!

    
por Josh 31.07.2011 / 17:53

2 respostas

1

A melhor maneira é codificar o nome do domínio (eu não sei quais nomes de domínio você pode ter, portanto esta é a opção preferida). Experimente esta regra:

RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} !^(www\.)?secure\. [NC]
RewriteRule .* https://secure.example.com%{REQUEST_URI} [R=301,L]

As diferenças:

  1. Em geral, é melhor verificar se o HTTPS está ativado, verificando a variável %{HTTPS} em vez de verificar o número da porta - você pode facilmente vincular o HTTPS desse site a outra porta e isso violará a regra (e você terá que editá-lo). Mas isso depende de suas circunstâncias particulares ... então cabe a você.

  2. Melhor que "Redirecionamento permanente 301" ( R=301 ) em vez de "302 encontrado" ( R ) - especialmente se o SEO estiver envolvido com essas URLs. Mas mais uma vez - não é uma coisa grande em geral.

  3. Você tem .\ em seu padrão para correspondência de host - suponho que seja apenas um erro de digitação.

Se você não quiser que seu nome de domínio seja codificado, experimente esta regra, mas não posso garantir que funcionará 100% corretamente:

RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} !^(www\.)?secure\.(.+)$ [NC]
RewriteRule .* https://secure.%2%{REQUEST_URI} [R=301,L]
    
por 31.07.2011 / 18:27
0

Evite codificar permanentemente o nome do domínio usando %{HOST_NAME} na minha linha RewriteRule , conforme recomendado por Tom O'Connor em resposta à minha pergunta Forçando SSL no Apache sem codificar o hostname , se isso ajudar, mas o Uma parte importante do problema parece (para mim) ser que %1 está correspondendo a (www.)? de seu RewriteCond , em vez do (.*) de seu RewriteRule , que seria %2 , conforme sugerido por LazyOne em sua resposta a>.

Pessoalmente, acho que usaria o seguinte:

RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} !^(www.)?secure\.(.+)$ [NC]
RewriteRule ^(.*)$ https://secure.$2/$3 [R=301,L]

, que é apenas ligeiramente diferente da sugestão do LazyOne, mas um pouco mais fácil de ler (na minha opinião).

    
por 01.02.2012 / 19:31