Arahkan seluruh situs web ke satu halaman

10

Saya perlu mengalihkan seluruh situs WordPress ke satu halaman WordPress tunggal. Semacam mode pemeliharaan, tetapi pengalihan harus pergi ke halaman WordPress yang diterbitkan. Sayangnya, halaman pemeliharaan yang perlu saya perlihatkan harus menggunakan plugin WordPress lainnya.

Saya tidak mengetahui adanya plugin Mode Pemeliharaan yang memungkinkan Anda melakukan ini. Paling-paling, mereka membiarkan Anda menulis kode HTML / CSS khusus.

Saya sedang memikirkan aturan .htaccess mod_rewrite. Namun, saya sangat lemah dengan mod_rewrite.

Pertama, saya menonaktifkan pengalihan kanonik .

Kemudian, saya mencoba menggunakan:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index.php?page_id=813$
RewriteRule ^(.*)$ /index.php?page_id=813 [R=307,L]

Namun, aturan ini menghasilkan pengalihan loop. page_id=813adalah ID dari halaman pemeliharaan saya, tentu saja.

Adakah yang mengetahui plugin mode pemeliharaan, yang mengalihkan ke halaman yang diterbitkan?

Atau, dapatkah seseorang membantu saya untuk memperbaiki aturan mod_rewrite? Sorakan ekstra jika kita dapat /wp-adminmengabaikan aturan redirect.

shea
sumber

Jawaban:

14

Anda sebenarnya dapat melakukan ini dari dalam WordPress itu sendiri, alih-alih perlu membuat perbaikan .htaccess yang membingungkan dan direkayasa ulang.

Kita dapat menghubungkan ke template_redirectfilter, yang hanya menyala di front-end (bukan di wp-admin). Kami kemudian menggunakan is_page()fungsi untuk memeriksa apakah kami melihat halaman dengan ID 813. Jika tidak, arahkan ke halaman itu menggunakan wp_redirect()fungsi.

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ) );
    exit;
} );

Ini akan bekerja dengan baik untuk mode pemeliharaan, karena pengalihan dilakukan dengan tajuk HTTP 'sementara' 302, membiarkan bot dan mesin pencari tahu bahwa situs Anda akan segera aktif. Namun, jika Anda memindahkan situs secara permanen, Anda mungkin ingin menggunakan header HTTP 'permanen' 301 untuk pengalihan. Anda dapat melakukan ini dengan menambahkan parameter kedua ke wp_redirectfungsi. Contoh:

add_action( 'template_redirect', function() {
    if ( is_page( 813 ) ) {
        return;
    }

    wp_redirect( esc_url_raw( home_url( 'index.php?page_id=183' ) ), 301 );
    exit;
} );
shea
sumber
Ini berfungsi baik untuk tujuan saya juga. Kecuali menambahkan twist - situs ini "down" untuk selamanya dan saya ingin menjaga WP tetap berjalan dan menjalankan halaman selamat tinggal sebagai halaman rumah. Apakah ada cara untuk menambahkan header 301 ke jenis pengalihan ini untuk SEO?
Tapefreak
@ Tagfreak Anda dapat mengatur header HTTP sebagai parameter kedua dari wp_redirectfungsi. Contoh:wp_redirect( home_url( 'index.php?page_id=183' ), 301 );
shea
1

Saya telah menyematkan jawaban yang diterima oleh @shea dalam plugin satu file, dan menambahkan dua opsi: redirect hanya pengguna non-admin & redirect ke URL sewenang-wenang.

Jika tertarik, silakan unduh plugin dari Github => https://github.com/Idearia/wp-redirect-website-to-url .

Pilihan

Opsi plugin sangat sederhana; untuk saat ini, mereka dikodekan dalam file plugin, tetapi saya mungkin mempertimbangkan untuk membangun halaman opsi jika orang memintanya:

  • DESTINATION_URL : URL lengkap tempat mengarahkan pengguna; dapat berupa laman di luar domain situs web.
  • DESTINATION_URL_ID : Jika URL pengalihan adalah halaman atau posting WordPress, tentukan di sini ID WordPress-nya.
  • USER_CAPABILITY : Pengguna dengan kemampuan ini tidak akan dialihkan; biarkan kosong untuk mengarahkan ulang semua orang; default adalah 'manage_options' yang diaktifkan untuk pengguna admin.
  • REDIRECT_STATUS_CODE : Status pengalihan: 302 untuk pengalihan sementara, 301 untuk pengalihan permanen.
  • DEBUG : Apakah akan mencetak informasi debug di debug.log.

Info yang diperbarui di halaman Github => https://github.com/Idearia/wp-redirect-website-to-url .

Harap dicatat bahwa plugin ini sangat mendasar; lebih banyak pengguna yang lebih maju dapat mempertimbangkan sebagai salah satu dari banyak plugin perawatan yang tersedia di repositori plugin WordPress.org.

Beri tahu saya jika Anda memiliki masalah dalam menjalankan plugin 😊

Guido Walter Pettinari
sumber
0

Saya akan mencari solusi yang lebih sederhana. Asumsi saya adalah bahwa Anda hanya ingin orang melihat satu halaman saja - tidak perlu halaman WP terlihat - untuk setiap permintaan untuk domain Anda.

Jadi, mengapa tidak membuat halaman HTML, gaya dengan CSS, dan letakkan halaman itu di folder lain di platform hosting Anda. Pastikan halaman seperti yang Anda inginkan.

Lalu arahkan domain Anda ke folder baru itu. Pada sebagian besar platform hosting, Anda dapat menentukan folder dasar suatu domain. Jadi arahkan domain Anda ke folder basis baru itu. Tidak perlu pengalihan htaccess yang rumit, atau plugin WP, atau filter khusus untuk menghubungkan ke WP.

Atau, Anda dapat memindahkan semua konten dari folder root domain saat ini, dan memasukkan file HTML sederhana Anda ke tempatnya.

Semoga tempat hosting juga memiliki 'pengalihan global' untuk setiap permintaan ke halaman apa pun di domain Anda.

Cara mana pun akan menjadi solusi sederhana untuk kebutuhan Anda hanya memiliki satu halaman untuk seluruh domain Anda.

Jika Anda benar-benar menginginkan solusi htaccess, gunakan yang ini:

RewriteEngine on

RewriteRule ^(.*)$ http://www.example.com/  [R=permanent,L]

..mengganti dengan domain Anda yang sebenarnya. Membuat SEO juga senang.

Rick Hellewell
sumber