Come rimuovere .html
dall'URL di una pagina statica?
Inoltre, devo reindirizzare qualsiasi URL con .html
a quello senza di esso. (cioè www.example.com/page.html
a www.example.com/page
).
Come rimuovere .html
dall'URL di una pagina statica?
Inoltre, devo reindirizzare qualsiasi URL con .html
a quello senza di esso. (cioè www.example.com/page.html
a www.example.com/page
).
Risposte:
Penso che una spiegazione della risposta di Jon sarebbe costruttiva. Il seguente:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
controlla che se il file o la directory specificati rispettivamente non esiste, la regola di riscrittura procede:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Ma cosa significa? Usa regex (espressioni regolari) . Ecco qualcosa che ho fatto prima ...
Io penso che sia corretto.
NOTA: durante il test .htaccess
non utilizzare reindirizzamenti 301. Usa 302 fino al termine del test, poiché il browser memorizzerà i 301 nella cache. Vedi https://stackoverflow.com/a/9204355/3217306
Aggiornamento: mi sbagliavo leggermente, .
corrisponde a tutti i caratteri tranne i caratteri di nuova riga, quindi include gli spazi. Inoltre, ecco un utile cheat regex
fonti:
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
Per rimuovere l'estensione .html dai tuoi URL, puoi utilizzare il seguente codice in 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 vuoi rimuovere qualsiasi altra estensione, ad esempio per rimuovere l'estensione .php, sostituisci semplicemente html ovunque con php nel codice sopra.
Con .htaccess sotto apache puoi fare il reindirizzamento in questo modo:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Per quanto riguarda la rimozione di .html dall'URL, è sufficiente collegarsi alla pagina senza .html
<a href="http://www.example.com/page">page</a>
!-f
Questo dovrebbe funzionare per te:
#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]
Dovrai assicurarti di averlo anche tu Options -MultiViews
.
Nessuno dei precedenti ha funzionato per me su un host cPanel standard.
Questo ha funzionato:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Grazie per le tue risposte. Ho già risolto il mio problema. Supponiamo che le mie pagine siano all'indirizzo http://www.iltuosito.com/html , si applicano le seguenti regole .htaccess .
<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>
Uso questo .htacess per rimuovere .html extantion dal mio sito URL, verifica che sia il codice corretto:
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. Sfortunatamente non capisco perché abbia funzionato, ma immagino che imparerò presto.
Per coloro che utilizzano l'hosting Firebase nessuna delle risposte funzionerà in questa pagina. Perché non puoi utilizzarlo .htaccess
nell'hosting Firebase. Dovrai configurare il file firebase.json. Basta aggiungere la riga "cleanUrls": true
nel file e salvarlo. Questo è tutto.
Dopo aver aggiunto la riga firebase.json avrà questo aspetto:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Per rimuovere l'estensione .html dai tuoi URL, puoi utilizzare il seguente codice in 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]
Grazie
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Prova questo :) non so se funziona.