it-swarm-id.com

Membuat 301 Pengalihan untuk Posting, Halaman, Kategori, dan URL Gambar?

Saya khawatir ini mungkin terlalu banyak untuk ditanyakan di sini, jadi jika demikian, jangan ragu untuk memberi tahu saya tempat lain untuk belajar.

Bantuan dengan Pengalihan

Saya membersihkan situs yang kurang berkembang dan memigrasi wordpress dari subdirektori. Saya telah menghabiskan berjam-jam mencoba membungkus kepala saya di sekitar logistik pengalihan dan regex. Saya pikir saya sudah bisa mengatasinya, tetapi akan sangat menghargai konfirmasi bahwa saya melakukan ini dengan benar, dan saran tentang praktik terbaik. Jika ada yang tahu tutorial yang baik dengan contoh cara, saya akan menghargai itu juga.

Jika ada yang tahu tentang sungguh plugin sederhana untuk ini, saya akan sangat berterima kasih. Saya telah melihat plugin Redirections, tetapi merasa sangat membingungkan (sakit kepala!). Bagaimanapun, ide-ide saya di bawah ini (sumber diikuti oleh => kemudian target) adalah apa yang telah saya kumpulkan dari instruksi Pengalihan dan tangkapan layar dan tutorial lain yang telah saya periksa. Saya cukup yakin bahwa mereka akan berlaku terlepas dari apakah saya meletakkannya langsung di file .htaccess atau menggunakan Pengalihan atau plugin lain?

Jadi, inilah yang saya coba capai dan bagaimana saya pikir itu perlu dilakukan:

  1. Untuk memindahkan Wordpress dari subdirektori ke root:

    /wp /(.*) => /$1
    
  2. Untuk semua halaman yang saat ini berada dalam subdirektori di root, saya ingin menghapus dan/atau menggabungkan banyak halaman menjadi satu halaman tingkat atas:

    /products-directory /(.*) =>/produk-top-level-halaman 
     
    /tentang-direktori /(.*) =>/tentang-top- level-page 
     
    /services-directory /(.*) =>/services-top-level-page 
    
  3. Untuk sekelompok halaman tingkat atas yang cocok dengan pola tertentu, saya ingin mengarahkan mereka ke dalam kategori tertentu, mis. semua nama file dimulai dengan dua kata yang sama seperti ini: same-Word-variasi-variasi.html dan saya ingin mereka menyimpan nama file yang ada - jika saya mengatur permalink saya untuk mengakhiri dengan `.html`, ini akan berfungsi , Aku percaya:

    /same-Word (. *) => /newcategory/$1
    

    Bagaimana saya membuat aturan jika saya tidak memiliki permalink yang diakhiri dengan `.html`? (Saya pikir saya melihat! Adalah karakter "tidak", tetapi tidak yakin bagaimana menggunakannya di sini - bukan):

    /same-Word (. *) => /newcategory/$1!\.html
    
  4. Dan kemudian, setelah saya memiliki halaman spesifik yang diidentifikasi dan dialihkan seperti di atas, saya akan menghapus semua yang lain (sampah) dan ingin mengirim pengguna ke beranda (atau mungkin posting acak?).

    Jadi, 2 pertanyaan di sini:

    1. Bagaimana cara membuat aturan yang mengatakan "untuk semuanya kecuali file yang sudah diarahkan seperti di atas, lakukan ini"

    2. Bagaimana cara saya menghentikan aturan itu untuk diterapkan ke halaman dan postingan baru yang saya buat mulai sekarang?

    Satu ide adalah bahwa dengan menghapus, saya akan mendapatkan halaman 404 tidak ditemukan, jadi saya harus membuat aturan untuk halaman 404 itu sendiri? Itukah yang ingin saya lakukan?

    Seperti yang saya katakan, situs ini telah dikembangkan dengan buruk (dengan klien menginstruksikan orang untuk hanya "membuang halaman" tanpa memperhatikan arsitektur yang tepat, SEO, dll) - ia hampir tidak memiliki peringkat atau tautan eksternal/back untuk khawatir, tapi saya ingin memahami pendekatan terbaik dari SEO dan perspektif pengembangan yang tepat.

  5. Juga, haruskah saya memindahkan gambar yang ada, dll. Ke direktori konten-wp atau meninggalkannya di sub-direktori/es yang ada? Kecenderungan saya adalah untuk benar-benar pergi untuk 'menyapu bersih' - singkirkan segala sesuatu yang tampaknya tidak rapi, tetapi saya tidak yakin apakah ini akan lebih berhasil daripada nilainya…

Terima kasih sebelumnya atas semua dan semua panduan.

5
CJN

Hai @CJN:,

Pertanyaan pertama Anda, memindahkan direktori WordPress ditangani secara berbeda dari yang lain.

Memindahkan WordPress dari Subdirektori ke Root:

Pergilah ke /wp-config.php dan tambahkan yang berikut ini untuk mendefinisikan (menggunakan domain klien Anda alih-alih example.com tentu saja):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 Pengalihan menggunakan template_loader dan wp_safe_redirect()

Anda dapat menyelesaikan sebagian besar dari sisa pertanyaan Anda dengan memodifikasi .htaccess sebagai @ Kau-Boy menunjukkan caranya, atau Anda bisa melakukannya di PHP. WordPress memiliki kait template_redirect yang dapat Anda gunakan untuk ini bersama dengan fungsi wp_safe_redirect() untuk mengarahkan ulang dengan 301 kode status HTTP. Seperti yang Anda lihat, sisanya hanya kasar untuk kode PHP dan sedikit sihir ekspresi reguler yang ditaburi. Anda dapat menempatkan kode ini secara praktis di mana saja di file functions.php tema Anda:

add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
  $redirect_to = false;
  list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
  $path_parts = explode('/',trim($url_path,'/'));
  switch ($path_parts[0]) {
    case 'products-directory':
      $redirect_to = '/products-top-level-page';
      break;
    case 'about-directory':
      $redirect_to = '/about-top-level-page';
      break;
    case 'services-directory':
      $redirect_to = '/services-top-level-page';
      break;
    default:
      if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
        $category = str_replace('.html','',$match[1]);
        $redirect_to = "/newcategory/{$category}";
      } else {
        // Do whatever else you need here
      }
  }
  if ($redirect_to) {
    wp_safe_redirect($redirect_to,301);
    exit();
  }
}

Pertimbangkan Kegunaan dan Bukan Hanya SEO?

Saya akan bertanya apakah Anda benar-benar ingin melakukan # 2? IMO yang membuat situs jauh lebih tidak dapat digunakan untuk pengguna daripada yang dioptimalkan hanya untuk SEO yang dirasakan (dan sebagai pendiri dan sekaligus koordinator grup ini Saya bukan orang baru SEO.) alih-alih melihat Anda hanya menjatuhkan "-directory" dari segmen pertama dari jalur URL. Lagipula, JMTCW.

Menghasilkan 404 Halaman?

Jika Anda perlu mengeluarkan 404, Anda bisa melakukannya dengan tajuk:

header("HTTP/1.0 404 Not Found");
exit;

Namun saya pikir bukan itu yang ingin Anda lakukan, benar? Saya pikir Anda dapat mencapai logika pengalihan apa pun yang Anda butuhkan dengan memodifikasi fungsi PHP di atas dan menanggapi permintaan HTTP dengan 301, kan?

Mengimpor Gambar ke Perpustakaan Media dan 301 Redirect

Anda dapat memindahkannya ke perpustakaan media dan hal itu akan memungkinkan Anda untuk mengaturnya maju. Berikut ini adalah plugin yang mungkin membantu (walaupun saya tidak yakin apakah itu bekerja dengan 3.0; jika tidak, mungkin juga merupakan basis kode yang baik untuk bekerja dengan):

URL Gambar Hardcoding 301 Redirect menggunakan Array

Maka karena itu akan menjadi satu kali Anda cukup meng-hardcode URL gambar Anda ke dalam array dan menggunakannya untuk mencocokkan dengan fungsi pengalihan Anda. Memodifikasi default dalam pernyataan beralih dari kode di atas mungkin terlihat seperti ini:

default:
  if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
    $category = str_replace('.html','',$match[1]);
    $redirect_to = "/newcategory/{$category}";
  } else {
    $images = array(
      '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
      '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
      '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
      );
    if (in_array($url_path,$images)) {
      $redirect_to = $images[$url_path];
    } else  {
      // Do whatever else you need here
    }
  }

Menggunakan preg_match() ke 301 Redirect Gambar dengan Pola URL

Tentu saja jika URL gambar Anda mengikuti pola, Anda bisa merampingkan banyak atau semua array gambar menggunakan preg_match() sebagai gantinya, seperti:

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

Semoga ini membantu?

8
MikeSchinkel

Ada plugin untuk mengubah dari satu struture permalink ke yang lain, tetapi saya cukup yakin ini tidak akan cukup untuk kebutuhan Anda. Anda harus menggunakan beberapa aturan penulisan ulang .htaccess. Saya mencoba memberikan beberapa contoh untuk kebutuhan Anda (tidak yakin apakah semuanya benar). Sertakan semua baris itu ke dalam file yang disebut ".htaccess" di root server Anda. Di luar itu di atas aturan wordpress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]

Bendera [R = 301] akan memberi tahu browser klien atau mesin pencari, bahwa itu adalah pengalihan permanen.

Anda mungkin ingin memperbarui semua permalink dalam database wordpress Anda. Saya menulis artikel tentang memperbarui string dalam database . Sayangnya saya belum menerjemahkan posnya. Tetapi pertanyaan harus jelas, jika tidak gunakan MySQL docs saja.

1
2ndkauboy

Saya menggunakan ini: Pengalihan 301 Sederhana plugin - menggunakannya untuk beberapa halaman sebelumnya, dan saya akan segera memindahkan situs desain web saya dengan semua file dan folder di dalam file WP saya.

0
Steve Shearer