Yang Anda maksud dengan "hapus .html" adalah "tidak perlu .html ada"?
Balapan Ringan di Orbit
@Tomalak: Ya dan juga mengarahkan url dengan ".html" ke yang tidak. Masalah saya adalah ini menghasilkan pengalihan tak terbatas. Penyiapan saya saat ini memungkinkan www.example.com/page.html dan www.example.com/page dapat diakses dan tidak ramah SEO.
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, .htaccessjangan gunakan pengalihan 301. Gunakan 302 hingga pengujian selesai, karena browser akan menyimpan 301 cache. Lihat https://stackoverflow.com/a/9204355/3217306
Ini tidak melakukan apa-apa untukku. Apakah ada alasan mengapa itu tidak berhasil?
Michael Yaworski
Apakah Anda memiliki file sebenarnya untuk tautan yang diminta? Itu akan memicu!-f
Martijn
72
Ini seharusnya berhasil untuk Anda:
#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]
Saya mendapatkan 404 di GoDaddy dengan kode ini dan saya memperbaikinya dengan meletakkan: Opsi + FollowSymLinks -MultiViews -Indexes di bagian paling atas.
Labanino
1
Menurut saya inilah jawaban terbaik dan terlengkap, terima kasih!
ctekk
Saya mencoba melakukan ini di localhost, tetapi tidak berhasil, apakah ada hal lain yang perlu saya lakukan, apakah saya harus menautkan file .htaccess, atau bagaimana halaman mengenalinya?
Pianistprogrammer
Bagaimana cara menambahkan ekstensi .php ke # 301 dari example.com/page.html ke example.com/page, apakah mungkin?
20
Anda perlu memastikan bahwa Anda juga memilikinya Options -MultiViews.
Semua hal di atas tidak berfungsi untuk saya pada host cPanel standar.
Dari semua jawaban di atas yang satu ini akhirnya berhasil .. Saya percaya karena situs saya di-host di GoDaddy dengan cPanel. Kuncinya adalah Opsi -MultiViews
Brad Vanderbush
Ya, tidak ada di bagian ini yang berhasil mengharapkan jawaban ini! Anda menyelamatkan hari itu!
Neil Bannet
Terima kasih sobat. Saya tidak yakin mengapa yang lain tidak bekerja seperti yang diharapkan.
Nanoo
13
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.
Ini sepertinya berhasil untuk saya, tidak seperti solusi lain yang disajikan di sini, terima kasih. Saya akan menambahkan bahwa Anda masih perlu memperbarui tautan di HTML Anda (jadi jika Anda awalnya menautkan ke file .html Anda sebagai <a href="page1.html"> </a>, Anda harus memperbarui sebagai <a href=" example.com/page1"> </ a > lalu akan berfungsi.)
Lorenzo
Perubahan inti bagi saya adalah RewriteBase /sedikit. Sayangnya saya tidak mengerti mengapa itu berhasil, tapi saya rasa saya akan segera belajar.
Keno Clayton
4
Bagi mereka yang menggunakan Firebase hosting, tidak ada jawaban yang akan berfungsi di halaman ini. Karena Anda tidak dapat menggunakan .htaccessdi Firebase hosting. Anda harus mengonfigurasi file firebase.json. Cukup tambahkan baris "cleanUrls": truedi file Anda dan simpan. Itu dia.
Setelah menambahkan baris firebase.json akan terlihat seperti ini:
Untuk menghapus ekstensi .html dari URL Anda, Anda dapat menggunakan kode berikut di 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]
Jawaban:
Saya pikir beberapa penjelasan dari jawaban Jon akan konstruktif. Pengikut:
memeriksa bahwa jika file atau direktori yang ditentukan tidak ada, maka aturan penulisan ulang dilanjutkan:
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/3217306Pembaruan: Saya sedikit salah,
.
mencocokkan semua karakter kecuali baris baru, jadi termasuk spasi. Juga, berikut adalah lembar contekan regex yang bermanfaatSumber:
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
sumber
Untuk menghapus ekstensi .html dari url Anda, Anda dapat menggunakan kode berikut di root / htaccess:
CATATAN: Jika Anda ingin menghapus ekstensi lain, misalnya untuk menghapus ekstensi .php, cukup ganti html di mana saja dengan php pada kode di atas.
sumber
Dengan .htaccess di bawah apache, Anda dapat melakukan pengalihan seperti ini:
Untuk menghapus .html dari url, cukup tautkan ke halaman tanpa .html
sumber
!-f
Ini seharusnya berhasil untuk Anda:
sumber
Anda perlu memastikan bahwa Anda juga memilikinya
Options -MultiViews
.Semua hal di atas tidak berfungsi untuk saya pada host cPanel standar.
Ini berhasil:
sumber
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.
sumber
Saya menggunakan .htacess ini untuk menghapus ekstensi .html dari situs url saya, harap verifikasi bahwa ini adalah kode yang benar:
sumber
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:
sumber
Untuk menghapus ekstensi .html dari URL Anda, Anda dapat menggunakan kode berikut di root / htaccess:
Terima kasih
sumber
Coba ini :) tidak tahu apakah itu berhasil.
sumber