Por "remover .html", você quer dizer "não requer que .html esteja presente"?
Lightness Races in Orbit de
@Tomalak: Sim e também redireciona os urls com ".html" para os sem. Meu problema é que isso resulta em redirecionamento infinito. Minha configuração atual permite que www.example.com/page.html e www.example.com/page sejam acessíveis, o que não é amigável para SEO.
NOTA: Ao testar o seu .htaccess, não use redirecionamentos 301. Use 302 até terminar o teste, pois o navegador armazenará 301s em cache. Veja https://stackoverflow.com/a/9204355/3217306
Update: Eu estava um pouco enganado, .corresponde a todos os caracteres, exceto novas linhas, então inclui espaço em branco. Além disso, aqui está uma folha de dicas de regex útil
Diagrama excelente para ajudar a explicar a resposta.
Ric
A dica sobre o 301s e o cache do navegador foi o que resolveu meus problemas.
bgfvdu3w
@KnocksX Não sou mais um webmaster e não estou em posição de poder ajudar
binaryfunt
84
Para remover a extensão .html de seus urls, você pode usar o seguinte código em root / htaccess:
RewriteEngine on
RewriteCond%{THE_REQUEST}/([^.]+)\.html [NC]RewriteRule^/%1[NC,L,R]RewriteCond%{REQUEST_FILENAME}.html -f
RewriteRule^%{REQUEST_URI}.html [NC,L]
NOTA: Se você deseja remover qualquer outra extensão, por exemplo, para remover a extensão .php, apenas substitua o html em todos os lugares por php no código acima.
Isso não faz nada para mim. Existe algum motivo pelo qual não funcionaria?
Michael Yaworski
Você tem um arquivo real para o link solicitado? Isso desencadearia o!-f
Martijn
72
Isso deve funcionar para você:
#example.com/page will display the contents of example.com/page.htmlRewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteCond%{REQUEST_FILENAME}.html -f
RewriteRule^(.+)$ $1.html [L,QSA]#301 from example.com/page.html to example.com/pageRewriteCond%{THE_REQUEST}^[A-Z]{3,9}\ /.*\.html\ HTTP/RewriteRule^(.*)\.html$ /$1 [R=301,L]
Eu estava pegando um 404 no Godaddy com esse código e corrigi colocando: Options + FollowSymLinks -MultiViews -Indexes no topo.
Labanino de
1
Acho que esta é a melhor e mais completa resposta, obrigado!
ctekk
Tentei fazer isso no localhost, mas não está funcionando. Há alguma outra coisa que eu preciso fazer, tenho que vincular o arquivo .htaccess ou como a página o reconhece?
Pianistprogrammer
Como adiciono a extensão .php a # 301 de example.com/page.html a example.com/page, é possível?
20
Você precisará ter certeza de que Options -MultiViews .
Nenhuma das opções acima funcionou para mim em um host cPanel padrão.
De todas as respostas acima, esta finalmente funcionou .. Acredito porque meu site está hospedado no godaddy com cPanel. A chave é Opções -MultiViews
Brad Vanderbush
Sim, nada nesta seção funciona, esperar esta resposta! Você salvou o dia!
Neil Bannet
Obrigado cara. Não sei por que os outros não funcionaram como o esperado.
Nanoo
13
Obrigado por suas respostas. Já resolvi meu problema. Suponha que eu tenha minhas páginas em http://www.yoursite.com/html , as seguintes regras de .htaccess se aplicam.
Isso pareceu funcionar para mim, ao contrário das outras soluções apresentadas aqui, obrigado. No entanto, eu acrescentaria que você ainda precisa atualizar o (s) link (s) em seu HTML (então, se você originalmente está vinculando ao seu arquivo .html como <a href="page1.html"> </a>, você deve atualizar como <a href=" example.com/page1"> </ a > e então funcionará.)
Lorenzo
A mudança fundamental para mim foi o RewriteBase /bit. Infelizmente não entendo por que funcionou, mas acho que aprenderei em breve.
Keno Clayton
4
Para quem usa o Firebase hosting, nenhuma das respostas funcionará nesta página. Porque você não pode usar .htaccessno Firebase hosting. Você terá que configurar o arquivo firebase.json. Basta adicionar a linha "cleanUrls": trueem seu arquivo e salvá-lo. É isso aí.
Depois de adicionar a linha firebase.json ficará assim:
Para remover a extensão .html de seus URLs, você pode usar o seguinte código em root / htaccess:
#mode_rerwrite start hereRewriteEngineOn# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.RewriteCond%{REQUEST_FILENAME}!-d
#Check for file in directory with .html extension RewriteCond%{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extensionRewriteRule^(.*)$ $1.html [NC,L]
Respostas:
Acho que alguma explicação da resposta de Jon seria construtiva. Os seguintes:
verifica se o arquivo ou diretório especificado, respectivamente, não existe, a regra de reescrita continua:
Mas o que isso significa? Ele usa regex (expressões regulares) . Aqui está uma coisinha que fiz antes ...
Eu acho que isso é correto.
NOTA: Ao testar o seu
.htaccess
, não use redirecionamentos 301. Use 302 até terminar o teste, pois o navegador armazenará 301s em cache. Veja https://stackoverflow.com/a/9204355/3217306Update: Eu estava um pouco enganado,
.
corresponde a todos os caracteres, exceto novas linhas, então inclui espaço em branco. Além disso, aqui está uma folha de dicas de regex útilFontes:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
fonte
Para remover a extensão .html de seus urls, você pode usar o seguinte código em root / htaccess:
NOTA: Se você deseja remover qualquer outra extensão, por exemplo, para remover a extensão .php, apenas substitua o html em todos os lugares por php no código acima.
fonte
Com .htaccess no apache você pode fazer o redirecionamento assim:
Quanto à remoção de .html do url, basta criar um link para a página sem .html
fonte
!-f
Isso deve funcionar para você:
fonte
Você precisará ter certeza de que
Options -MultiViews
.Nenhuma das opções acima funcionou para mim em um host cPanel padrão.
Isso funcionou:
fonte
Obrigado por suas respostas. Já resolvi meu problema. Suponha que eu tenha minhas páginas em http://www.yoursite.com/html , as seguintes regras de .htaccess se aplicam.
fonte
Eu uso este .htacess para remover .html extensões do meu site url, verifique se este é o código correto:
fonte
RewriteBase /
bit. Infelizmente não entendo por que funcionou, mas acho que aprenderei em breve.Para quem usa o Firebase hosting, nenhuma das respostas funcionará nesta página. Porque você não pode usar
.htaccess
no Firebase hosting. Você terá que configurar o arquivo firebase.json. Basta adicionar a linha"cleanUrls": true
em seu arquivo e salvá-lo. É isso aí.Depois de adicionar a linha firebase.json ficará assim:
fonte
Para remover a extensão .html de seus URLs, você pode usar o seguinte código em root / htaccess:
obrigado
fonte
Experimente :) não sei se funciona.
fonte