Bagaimana cara menghapus .html
dari URL halaman statis?
Selain itu, saya perlu mengalihkan url apa pun dengan .html
yang tanpa itu. (yaitu www.example.com/page.html
ke www.example.com/page
).
Bagaimana cara menghapus .html
dari URL halaman statis?
Selain itu, saya perlu mengalihkan url apa pun dengan .html
yang tanpa itu. (yaitu www.example.com/page.html
ke www.example.com/page
).
Jawaban:
Saya pikir beberapa penjelasan dari jawaban Jon akan konstruktif. Pengikut:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
memeriksa bahwa jika file atau direktori yang ditentukan tidak ada, maka aturan penulisan ulang dilanjutkan:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Tapi apa maksudnya itu? Ini menggunakan regex (ekspresi reguler) . Ini adalah sesuatu yang saya buat sebelumnya ...
Saya pikir itu benar.
CATATAN: Saat menguji, .htaccess
jangan gunakan pengalihan 301. Gunakan 302 hingga pengujian selesai, karena browser akan menyimpan 301 cache. Lihat https://stackoverflow.com/a/9204355/3217306
Pembaruan: Saya sedikit salah, .
mencocokkan semua karakter kecuali baris baru, jadi termasuk spasi. Juga, berikut adalah lembar contekan regex yang bermanfaat
Sumber:
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
Untuk menghapus ekstensi .html dari url Anda, Anda dapat menggunakan kode berikut di 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]
CATATAN: Jika Anda ingin menghapus ekstensi lain, misalnya untuk menghapus ekstensi .php, cukup ganti html di mana saja dengan php pada kode di atas.
Dengan .htaccess di bawah apache, Anda dapat melakukan pengalihan seperti ini:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Untuk menghapus .html dari url, cukup tautkan ke halaman tanpa .html
<a href="http://www.example.com/page">page</a>
!-f
Ini seharusnya berhasil untuk Anda:
#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]
Anda perlu memastikan bahwa Anda juga memilikinya Options -MultiViews
.
Semua hal di atas tidak berfungsi untuk saya pada host cPanel standar.
Ini berhasil:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Terima kasih atas balasan Anda. Saya sudah memecahkan masalah saya. Misalkan saya memiliki halaman saya di bawah http://www.yoursite.com/html , aturan .htaccess berikut berlaku.
<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>
Saya menggunakan .htacess ini untuk menghapus ekstensi .html dari situs url saya, harap verifikasi bahwa ini adalah kode yang benar:
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 /
sedikit. Sayangnya saya tidak mengerti mengapa itu berhasil, tapi saya rasa saya akan segera belajar.
Bagi mereka yang menggunakan Firebase hosting, tidak ada jawaban yang akan berfungsi di halaman ini. Karena Anda tidak dapat menggunakan .htaccess
di Firebase hosting. Anda harus mengonfigurasi file firebase.json. Cukup tambahkan baris "cleanUrls": true
di file Anda dan simpan. Itu dia.
Setelah menambahkan baris firebase.json akan terlihat seperti ini:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Untuk menghapus ekstensi .html dari URL Anda, Anda dapat menggunakan kode berikut di 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]
Terima kasih
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Coba ini :) tidak tahu apakah itu berhasil.