Como remover .html
do URL de uma página estática?
Além disso, preciso redirecionar qualquer url com .html
para aquele sem ele. (ou seja, www.example.com/page.html
para www.example.com/page
).
Como remover .html
do URL de uma página estática?
Além disso, preciso redirecionar qualquer url com .html
para aquele sem ele. (ou seja, www.example.com/page.html
para www.example.com/page
).
Respostas:
Acho que alguma explicação da resposta de Jon seria construtiva. Os seguintes:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
verifica se o arquivo ou diretório especificado, respectivamente, não existe, a regra de reescrita continua:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
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/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
Fontes:
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
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.
Com .htaccess no apache você pode fazer o redirecionamento assim:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Quanto à remoção de .html do url, basta criar um link para a página sem .html
<a href="http://www.example.com/page">page</a>
!-f
Isso deve funcionar para você:
#example.com/page will display the contents of example.com/page.html
RewriteCond %{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/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
Você precisará ter certeza de que Options -MultiViews
.
Nenhuma das opções acima funcionou para mim em um host cPanel padrão.
Isso funcionou:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
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.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
RewriteRule .* http://localhost/html/%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
RewriteRule .* %1.html [L]
</IfModule>
Eu uso este .htacess para remover .html extensões do meu site url, verifique se este é o código correto:
RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
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:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Para remover a extensão .html de seus URLs, você pode usar o seguinte código em root / htaccess:
#mode_rerwrite start here
RewriteEngine On
# 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 extension
RewriteRule ^(.*)$ $1.html [NC,L]
obrigado
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Experimente :) não sei se funciona.