Ya, saya telah membaca manual Apache dan mencari di sini. Untuk beberapa alasan saya tidak bisa membuat ini bekerja. Hal terdekat yang pernah saya lakukan adalah menghapus ekstensi, tetapi mengarah kembali ke direktori root. Saya ingin ini hanya berfungsi di direktori yang berisi .htaccess
file.
Saya perlu melakukan tiga hal dengan .htaccess
file tersebut.
Saya membutuhkannya untuk menghapus .php
Sebuah. Saya memiliki beberapa halaman yang menggunakan tab dan URL-nya terlihat seperti page.php # tab - apakah ini mungkin?
b. Saya memiliki satu halaman yang menggunakan ID sesi yang ditambahkan ke URL untuk memastikan Anda datang dari tempat yang tepat
www.domain.com/download-software.php?abcdefg
,.
Apakah ini mungkin? Juga dalam melakukan ini, apakah saya perlu menghapus ".php" dari tautan di header saya termasuk file nav? SebaiknyaIE "<a href="support.php">support</a>" be <a href="support">support</a>?
- Saya ingin itu memaksa "www" sebelum setiap URL, jadi bukan
domain.com
, tapiwww.domain.com/page
. - Saya ingin menghapus semua garis miring dari halaman.
Saya akan terus mencari, mencoba, dll. Apakah berada di sub direktori menyebabkan masalah?
Jawaban:
Jawaban Gumbo dalam pertanyaan Stack Overflow Bagaimana cara menyembunyikan ekstensi .html dengan Apache mod_rewrite seharusnya berfungsi dengan baik.
Re 1) Ubah .html menjadi .php
Re a.) Yup, itu mungkin, tambahkan saja
#tab
ke URL.Re b.) Itu mungkin menggunakan
QSA
(Query String Append), lihat di bawah.Ini juga harus berfungsi di jalur sub-direktori:
sumber
[L,
spasiQSA]
, jika tidak, 500 Server Internal Error akan terjadi./index/bla/bla
menjadi sama denganindex.php
Apache mod_rewrite
Yang Anda cari adalah mod_rewrite ,
Secara umum,
mod_rewrite
bekerja dengan mencocokkan dokumen yang diminta dengan ekspresi reguler yang ditentukan, kemudian melakukan penulisan ulang URL secara internal (dalam proses apache) atau secara eksternal (di browser klien). Penulisan ulang ini bisa sesederhana menerjemahkan example.com/foo secara internal menjadi permintaan misalnya example.com/foo/bar.Dokumen Apache menyertakan
mod_rewrite
panduan dan saya pikir beberapa hal yang ingin Anda lakukan tercakup di dalamnya. Panduan mod_rewrite terperinci .Paksa
www
subdomainPanduan penulisan ulang menyertakan instruksi untuk ini di bawah contoh Canonical Hostname .
Hapus garis miring (Bagian 1)
Saya tidak yakin mengapa Anda ingin melakukan ini karena panduan penulisan ulang menyertakan contoh untuk kebalikannya , yaitu, selalu menyertakan garis miring. Dokumen menyarankan bahwa menghapus garis miring memiliki potensi besar untuk menyebabkan masalah:
Mungkin Anda bisa menjelaskan mengapa Anda ingin menghapus garis miring sepanjang waktu?
Hapus
.php
ekstensiHal terdekat untuk melakukan ini yang dapat saya pikirkan adalah menulis ulang secara internal setiap dokumen permintaan dengan ekstensi .php, yaitu, example.com/somepage malah diproses sebagai permintaan untuk example.com/somepage.php. Perhatikan bahwa melanjutkan dengan cara ini akan mengharuskan setiap somepage benar-benar ada sebagai somepage.php pada sistem berkas.
Dengan kombinasi yang tepat dari persamaan reguler, hal ini harus dimungkinkan sampai batas tertentu. Namun, saya dapat meramalkan beberapa kemungkinan masalah dengan halaman indeks yang tidak diminta dengan benar dan direktori yang tidak cocok dengan benar.
Misalnya, ini akan menulis ulang example.com/test dengan benar sebagai permintaan untuk example.com/test.php:
Namun akan membuat example.com gagal dimuat karena tidak ada example.com/.php
Saya akan menebak bahwa jika Anda menghapus semua garis miring, kemudian memilih permintaan indeks direktori dari permintaan nama file di direktori induk akan menjadi hampir tidak mungkin. Bagaimana Anda menentukan permintaan untuk direktori 'foobar':
dari permintaan file bernama foobar (yang sebenarnya foobar.php)
Mungkin saja jika Anda menggunakan
RewriteBase
arahan. Tetapi jika Anda melakukannya maka masalah ini menjadi jauh lebih rumit karena Anda akan memerlukanRewriteCond
arahan untuk melakukan pemeriksaan tingkat sistem file jika permintaan dipetakan ke direktori atau file.Yang mengatakan, jika Anda menghapus persyaratan untuk menghapus semua garis miring yang membuntuti dan sebaliknya menambahkan garis miring secara paksa, masalah "tanpa ekstensi .php" menjadi sedikit lebih masuk akal.
Ini masih belum sempurna - setiap permintaan untuk file masih memiliki .php yang ditambahkan ke permintaan secara internal. Permintaan untuk 'hi.txt' akan memasukkan ini ke dalam log kesalahan Anda:
Tetapi ada opsi lain, atur
DefaultType
danDirectoryIndex
arahan seperti ini:Perbarui 2013-11-14 - Memperbaiki potongan di atas untuk memasukkan pengamatan nicorellius
Sekarang permintaan untuk hi.txt (dan yang lainnya) berhasil, permintaan ke example.com/test akan mengembalikan versi test.php yang telah diproses, dan file index.php akan berfungsi kembali.
Saya harus memberikan kredit di mana kredit jatuh tempo untuk solusi ini karena saya menemukannya di Blog Michael J. Radwins dengan mencari di Google untuk php tanpa ekstensi apache .
Hapus garis miring
Beberapa pencarian
apache remove trailing slashes
membawa saya ke beberapa halaman Search Engine Optimization. Rupanya beberapa Sistem Manajemen Konten (Drupal dalam hal ini) akan membuat konten tersedia dengan dan tanpa garis miring di URls, yang dalam dunia SEO akan menyebabkan situs Anda dikenai penalti konten duplikat. SumberSolusinya tampaknya cukup sepele, menggunakan
mod_rewrite
we rewrite dengan syarat sumber daya yang diminta diakhiri dengan a/
dan menulis ulang URL dengan mengirimkan kembali301 Permanent Redirect
header HTTP.Berikut contohnya yang mengasumsikan domain Anda adalah blamcast.net dan memungkinkan permintaan untuk diawali dengan opsional
www.
.Sekarang kita menuju ke suatu tempat. Mari kita gabungkan semuanya dan lihat seperti apa tampilannya.
Wajib
www.
, tidak.php
, dan tidak ada garis miringIni mengasumsikan domainnya adalah foobar.com dan berjalan pada port standar 80.
Bendera 'R' dijelaskan di bagian
RewriteRule
direktif. Potongan:Catatan Akhir
Saya tidak bisa berhasil menghapus garis miring. Pengalihan akhirnya memberi saya pengulangan pengalihan tak terbatas. Setelah membaca solusi asli lebih dekat, saya mendapat kesan bahwa contoh di atas berfungsi untuk mereka karena cara instalasi Drupal mereka dikonfigurasi. Dia menyebutkan secara spesifik:
Mengacu pada URL yang diakhiri dengan dan tanpa garis miring. Selanjutnya,
sumber
DirectoryIndex index index.html
? atauDirectoryIndex index.php index.html
?Selain jawaban lain di atas,
Anda juga dapat mencoba ini untuk menghapus ekstensi .php sepenuhnya dari file Anda dan untuk menghindari loop tak terbatas :
Kode ini akan bekerja di Root / .htaccess, Pastikan untuk mengubah RewriteBase jika Anda ingin menempatkan ini ke file htaccess di sub direktori.
Edit:
Pada apache 2.4 dan yang lebih baru, Anda juga dapat menggunakan flag END untuk mencegah kesalahan loop tak terbatas. Contoh berikut berfungsi sama seperti di atas pada apache 2.4,
sumber
Kode berikut berfungsi dengan baik untuk saya:
sumber
Berikut adalah metode jika Anda ingin melakukannya hanya untuk satu file tertentu:
Ref: http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/
sumber
Setelah mengubah parameter
AllowOverride
dariNone
keAll
dalam/etc/apache2/apache2.conf
(Debian 8), mengikuti ini , file .htaccess hanya harus berisi:Dan itu cukup untuk menyembunyikan ekstensi .php dari file
sumber
MultiViews
melakukan ini di luar kotak<a href="somepage.php">
tautan</a>
ke<a href="somepage">
tautan</a>
dalam kode sumberCoba ini
Kode berikut pasti akan berfungsi
sumber
Tidak yakin mengapa jawaban lain tidak berhasil untuk saya, tetapi kode yang saya temukan ini berhasil:
Itu semua yang ada di htaccess saya dan example.com/page menunjukkan example.com/page.php
sumber
Untuk menghapus ekstensi .php dari file PHP misalnya yoursite.com/about.php ke yoursite.com/about Ikuti langkah ini. Buka file .htaccess (buat yang baru jika tidak ada) dari root situs Anda, dan tambahkan kode berikut.
Untuk menghapus ekstensi .html dari file html misalnya yoursite.com/about.html ke yoursite.com/about Ikuti langkah ini.
Buka file .htaccess (buat yang baru jika tidak ada) dari root situs Anda, dan tambahkan kode berikut.
Referensi: Cara Menghapus Ekstensi php dari URL
sumber
Jika Anda melakukan coding dalam PHP dan ingin menghapus .php sehingga Anda dapat memiliki URL seperti:
http://yourdomain.com/blah -> yang mengarah ke /blah.php
Ini semua yang Anda butuhkan:
sumber
Saya menemukan 100% Konsep berfungsi untuk saya:
Gunakan kode ini di Root file .htaccess situs web Anda seperti:
offline - wamp \ www \ YourWebDir
online - public_html /
sumber
RewriteRule
dengan tag diL
samping satu sama lain.[L]
mengatakanmod_rewrite
bahwa itu adalah aturan terakhir untuk yang ditentukanRewriteCond
.Berikut adalah kode yang saya gunakan untuk menyembunyikan
.php
ekstensi dari nama file:Catatan:
R=301
untuk pengalihan permanen dan disarankan untuk digunakan untuk tujuan SEO. Namun jika salah satu hanya menginginkan redirect sementara, gantilah dengan justR
sumber
Saya berakhir dengan kode kerja berikut:
sumber
Jika url Anda di PHP seperti http://yourdomain.com/demo.php daripada muncul seperti http://yourdomain.com/demo
Ini semua yang Anda butuhkan:
buat file .htaccess
sumber
http://example.com/myfile
tetapi tidak berhasil kehttp://example.com/myfolder/
(file indeks). Dapatkah Anda membantu saya membuatnya berfungsi untuk file indeks?Mencoba
sumber