it-swarm-id.com

Menyiapkan WordPress dengan Permalinks Khusus dan tanpa File .htaccess?

Saya punya klien yang lebih suka menonaktifkan file .htaccess karena mereka suka mengatur sendiri konfigurasi Apache. Namun, mereka masih menginginkan URL yang ramah-SEO.

Apakah ada cara untuk memiliki permalinks khusus tanpa file .htaccess? Sejauh ini penelitian saya tampaknya mengindikasikan bahwa ini tidak mungkin, tetapi mungkin salah satu pengembang yang brilian tahu bagaimana hal yang tampaknya mustahil dapat dimungkinkan. Terima kasih sebelumnya!

7
Mike Lee

Hai @ Mike Lee :

Untuk menjawab pertanyaan Anda, sangat membantu untuk memahami cara kerja semuanya.

Apache Melayani URL yang Cocok dengan File dan Direktori

Apache dirancang untuk menyajikan file yang dicocokkan secara eksplisit dengan URL, atau untuk melayani index.php yang ditemukan dalam direktori ketika direktori secara eksplisit dicocokkan.

Tetapi Apache Dapat Melayani URL yang Cocok dengan Regex dengan mod_rewrite

Jika Anda ingin Apache mencocokkan URL dengan yang tidak ada direktori nyata (seperti WordPress dan permalink cantik) maka Anda harus punya cara untuk memberi tahu Apache cara menangani URL secara berbeda. Dan itulah yang mod_rewrite dirancang untuk memungkinkan; itu memberi administrator server kemampuan untuk menetapkan aturan untuk URL yang cocok menggunakan ekspresi reguler. Aturan-aturan tersebut merutekan hasilnya ke URL lain, sering kali termasuk file .PHP sebenarnya dan kadang-kadang dengan parameter URL diteruskan. Pada akhirnya aturan menentukan bahwa file aktual bisa dimuat.

Dan mod_rewrite Dikonfigurasi dengan .htaccess atau httpd.conf

Untuk mengkonfigurasi mod_rewrite Anda hanya dapat melakukannya di dalam .htaccess atau dalam file httpd.conf atau salah satu file yang disertakan, seperti yang berpotensi httpd-vhosts.conf. Sebenarnya saya terkejut jika klien Anda memiliki keterampilan untuk mengendalikan Apache bahwa mereka belum mengetahui hal ini.

WordPress Selalu Menggunakan File .htaccess Sederhana Sama

Beralih ke apa yang dilakukan WordPress, ketika Anda mengatur permalink WordPress menulis yang berikut ini ke file .htaccess, dengan anggapan itu dapat ditulis ( dan dalam contoh pertama ini dengan asumsi situs web Anda dilayani dari root :

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Peringatan: Ketika Direktori Halaman Depan WordPress Anda Bukan Root

Jika situs Anda sebaliknya dilayani dari /blog maka file .htaccess yang ditulis akan terlihat seperti ini:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

Semua Rute WordPress Non-File/Direktori yang Cocok dengan index.php

Jadi seperti yang Anda lihat, satu-satunya hal yang digunakan WordPress untuk .htaccess adalah memetakan sembarang URL ke domain ke /index.php (atau /blog/index.php di Contoh 2) kecuali ketika URL cocok dengan file aktual (seperti .jpg/.gif/.png gambar, .css stylesheet, .js skrip, dll.) atau ketika cocok dengan direktori aktual (yang sejauh yang saya tahu tidak relevan dalam instalasi WordPress standar.)

Dalam PHP WordPress Parses $_SERVER['REQUEST_URI'] Untuk Memutuskan Apa yang Dimuat

Di dalam kode PHP-nya WordPress mengambil nilai $_SERVER['REQUEST_URI'] yang berisi permintaan URL lengkap sans domain dan skema (yaitu skema http atau https) dan kemudian mem-parsing nilai untuk menentukan apa URL itu diminta dan dengan demikian halaman apa yang harus dimuat.

Memotong .htaccess? Dapatkan Apache untuk Muat URL Virtual (tapi semoga berhasil dengan itu!)

Jadi, jika Anda ingin mem-bypass .htaccess, tugas Anda adalah membuat Apache merespons URL yang sewenang-wenang kemudian memuat WordPress dan menetapkan $_SERVER['REQUEST_URI'] menjadi jalur URL plus parameter; TKI menipu tapi dengan cara yang baik. Yang mengatakan, saya tahu jika tahu tidak ada cara yang tidak terlalu rumit untuk melakukan itu.

Menyematkan /index.php/ (Mungkin?!?)

Meskipun * Chris_O * benar tentang membebani /index.php/ ke URL Anda, saya merasa ngeri setiap kali saya melihatnya. Ia menambahkan 10 karakter ke setiap URL membuatnya lebih panjang dan kurang berarti bagi mesin pencari, tetapi jauh lebih buruk membuatnya kurang bisa dibagikan dan terlihat samar bagi pengguna. Maaf Chris, saya tahu Anda bermaksud baik, tapi ugh!

Buat Direktori Nyata untuk Setiap URL (Mungkin?)

Salah satu cara untuk mendapatkan permalink cantik tanpa menyentuh Apache adalah dengan menulis skrip yang akan menghasilkan direktori aktual untuk setiap URL yang Anda inginkan dan kemudian menyimpan index.php di sana yang akan memuat WordPress. Tentu saja itu akan menjadi upaya besar untuk keuntungan kecil dan itu akan memerlukan server untuk memiliki akses tulis yang harus lebih buruk daripada menggunakan file .htaccess.

Saya benci mengakui tetapi inilah yang saya lakukan sekitar tahun 1998 dengan situs web .ASP- ketika IIS tidak mendukung penulisan ulang URL (dan bahkan hari ini masih merupakan PITA nyata!) Itu adalah hack yang jelek, sulit untuk dipertahankan dan saya membencinya tetapi URL itu pasti bagus untuk pengguna dan SEO!

Solusi terbaik? Tambahkan Aturan Tulis Ulang ke httpd.conf

Kembali ke apa yang mungkin merupakan solusi terbaik Anda, dan @ Simon Brown sebenarnya merekomendasikannya; tambahkan aturan penulisan ulang Anda ke httpd.conf atau salah satu dari file yang disertakan seperti httpd-vhosts.conf (yang merupakan cara Apache dikonfigurasi di localhost di Mac saya.) Tambahkan arahan berikut memastikan untuk mengubah direktori agar sesuai dengan direktori untuk situs Anda:

<Directory "/home/example_user/public_html/">
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>

Bonus! Dengan Lockdown Hadir Kinerja Juga

Opsi terakhir ini harus menghilangkan .htaccess dan mengendalikannya kembali. Lebih bagus lagi, performanya sedikit lebih baik karena httpd.conf hanya dimuat sekali ketika Apache mulai tetapi .htaccess file dimuat dan diuraikan pada setiap permintaan URL!

P.S. Satu hal lagi yang perlu dipertimbangkan adalah front-end Apache dengan server caching seperti Nginx yang saya percaya menjadi praktik terbaik untuk situs WordPress lalu lintas tinggi yang benar-benar perlu menjadi pemain. Mungkin perlu penyesuaian bidang hijau karena saya pikir sebagian besar orang tidak menggunakan Nginx untuk melakukan penulisan ulang URL untuk Apache, tetapi jika arah itu menarik bagi Anda, berikut beberapa tautan untuk dikejar:

15
MikeSchinkel

Permalinks tanpa mod_rewrite

Tanpa file .htaccess atau mengubah file httpd.conf Anda, yang terbaik yang dapat Anda lakukan adalah pathinfo permalinks. Permalink Pathinfo sama dengan permalink cantik kecuali mereka mulai dengan index.php.

Untuk menggunakan permalink pathinfo, letakkan index.php/di awal struktur permalink khusus Anda:

/index.php/%postname%/

Lihat artikel Codex untuk informasi lebih lanjut.

2
Chris_O

Kembali di masa lalu yang buruk, WordPress harus menulis file konfigurasi baru setiap kali Anda mengubah struktur permalink. Dalam pengaturan modern, RewriteRules tidak berubah:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Semua permintaan untuk file yang tidak ada (mis. Jalur permalink khusus yang tidak cocok dengan file pada sistem file) akan dilewati index.php, dan $_SERVER['REQUEST_URI'] memberitahu PHP apa yang sebenarnya diminta. Klien Anda dapat mengatur aturan penulisan ulang di httpd.conf atau .htaccess, dan Anda tidak perlu memodifikasinya saat Anda Tweak struktur permalink.

Beberapa plugin berusaha mengubah .htaccess sendiri, atau meminta Anda untuk memodifikasi file. Solusi ini mungkin tidak untuk semua orang, tetapi perlu dipertimbangkan.

0
Annika Backstrom