# Redirect html RewriteCond %{REQUEST_URI} \.html RewriteRule ^(.*)\.html$ /$1 [L]
Este não é um "redirecionamento", como em um "redirecionamento 3xx externo", que você parece estar sugerindo. Se você está vendo um "redirecionamento", então alguma outra coisa está fazendo isso, ou você está vendo uma resposta em cache. A diretiva acima é uma reescrita interna - a URL na barra de endereços do navegador não muda (isso seria ruim para SEO).
A diretiva RewriteCond
também é supérflua neste caso ... apenas significa que você está verificando a .html
na URL solicitada duas vezes .
Se você quiser remover a extensão .html
por meio de um redirecionamento, precisará de algo como:
RewriteRule ^(.*)\.html$ /$1 [R,L]
No entanto, para remover a extensão .php
do URL, também é preciso evitar o redirecionamento de index.php
(para o qual o controlador de frente do WordPress reescreve para) ou verificar apenas se você está verificando a solicitação inicial, não a solicitação reescrita. Por exemplo:
# Redirect php (avoiding "/wp-admin/" and "/index.php")
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteRule ^(.*)\.php$ /$1 [R,L]
Para garantir que você está testando apenas a solicitação inicial e não uma solicitação reescrita, use uma condição como:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
Isto simplesmente verifica se a variável de ambiente REDIRECT_STATUS
está vazia - o que está no pedido inicial. Após o primeiro sucesso reescrita , ele é definido como "200" (como no status HTTP 200 OK).
Altere o R
para R=301
se esse for um redirecionamento permanente, mas somente depois de confirmar que está funcionando OK.
Você também deve evitar adicionar suas próprias diretivas personalizadas ao bloco # BEGIN WordPress
, pois elas podem ser substituídas pelo próprio WordPress. Em vez disso, essas diretivas devem ser escritas antes do bloco # BEGIN WordPress
, junto com seu redirecionamento HTTP para HTTPS (que também não é um redirecionamento - você precisa o sinalizador R
no RewriteRule
).