Redirecionar todas as páginas para não www e uma página para www

Redirecionar todas as páginas para não www e uma página para www

Quero redirecionar todas as minhas páginas internas (por exemplo example.com/about:) para a versão não www, mas quero que minha página inicial ( https://example.com) redirecione para a versão www ( https://www.example.com).

Pesquisei muitos artigos na internet, mas não funcionou.

Se definir ambas as regras, as páginas internas serão redirecionadas corretamente, mas a página inicial ficará presa em um loop.

Não sei codificar, então, por favor, peço que você escreva o código que devo colar no meu .htaccessarquivo

Atualmente, configurei todas as páginas para redirecionar para suas versões não www (até mesmo a página inicial) com o código abaixo:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>
# BEGIN Sitepad
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
# END Sitepad

Responder1

Pesquisei muitos artigos na internet, mas não funcionou.

Provavelmente porque este é um requisito estranho. Eu ficaria surpreso se você encontrasse algum código que pudesse simplesmente copiar/colar que faça isso.

No entanto, supondo que você esteja construindo o URL absoluto correto para todos os seus links internos (já que você não deve vincular internamente a um URL que redireciona), então isso é relativamente trivial de implementar .htaccessse você entender suas diretivas existentes.

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

A regex .*noRewriteRule padrãopartidastudo. Especificamente, corresponde a 0 ou mais de qualquer caractere, conforme indicado pelo *quantificador. Ele corresponde ao caminho de URL vazio (ou seja, a "página inicial") e a todos os caminhos de URL não vazios (ou seja, todo o resto).

Você precisa alterar o regex acima para que corresponda a um caminho de URL não vazio (ou seja, tudo, exceto a página inicial). E crie outra regra (na outra direção) que corresponda apenas a um caminho de URL vazio.

(Isso usa o fato de que mod_dir está servindo index.phppara solicitações para a página inicial, não para as diretivas mod_rewrite a seguir.)

Para corresponder 1 ou mais (ou seja, caminho de URL não vazio), você pode usar o +quantificador (mais), em vez de *(estrela/asterisco).

Por exemplo:

# Redirect everything except the homepage (from www to non-www)
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.+)$ https://example.com/$1 [L,R=301]

# Redirect the homepage only (from non-www to www)
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^$ https://www.example.com/ [L,R=301]

Você precisará limpar o cache do navegador antes de testar, pois o redirecionamento 301 (permanente) anterior que redirecionou a página inicial de www para não www terá sido armazenado em cache pelo navegador.

Teste primeiro com redirecionamentos 302 (temporários) para evitar possíveis problemas de cache.

informação relacionada