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 .htaccess
arquivo
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 .htaccess
se 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.php
para 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.