Path alias membuat pengalihan loop atau pengalihan ke halaman depan

11

Ketika saya menyebut situs kami "www.example.com/contact-us", saya mengalami kesalahan berikut:

Ups, sepertinya permintaan ini mencoba membuat loop tak terbatas. Kami tidak mengizinkan hal-hal seperti itu di sini. Kami adalah situs web profesional!

Jika saya memanggil situs dengan "www.example.com/node/5" halaman kontak ditampilkan dengan baik.

Ketika saya memeriksa alias path di / admin / config / search / path / edit / 6, path sistem dan alias diatur dengan benar.

Masalah lain ada untuk alias lain, ketika saya memanggil "www.example.com/staff" Saya dialihkan ke halaman arahan "www.example.com". Sekali lagi alias diatur dengan benar.

Kami menggunakan Drupal 7, dan modul i18n_redirect dan redirect.

Matthias
sumber
Saya kira saya menemukannya: di "www.example.com/admin/config/search/redirect" ada entri yang mengarahkan ulang URL itu. Saya tidak tahu bagaimana mereka sampai di sana ...
Matthias

Jawaban:

19

Edit halaman Anda dan pergi ke pengalihan URL . Temukan jalur pengalihan dengan jumlah hitungan terbanyak dan hapus. Klik simpan lalu lihat halaman.

Beri tahu saya jika itu memperbaiki masalah Anda

Ryan G
sumber
Saya mengalami masalah yang sama dan sementara ini memperbaiki hal-hal untuk masing-masing node saya mencoba mencari tahu apa yang menyebabkannya di tempat pertama sehingga ini tidak terjadi untuk memulai.
Emas
8

Pembaruan: Masalah Drupal # 1796596 dilakukan sejak Redirect 1.0-rc2 (Juni 2015). Solusi yang tepat untuk masalah ini sekarang adalah meng-upgrade ke rilis stabil terbaru dari modul Redirect, dan kemudian menjalankan pembaruan basis data. Setiap pengalihan lingkaran yang Anda miliki akan dibersihkan dengan aman.

Masalah ini muncul karena bug dalam modul pengalihan. Anda memicu dengan mengubah URL halaman (atau mungkin hanya judulnya, jika Anda menggunakan pathauto) dan kemudian mengubahnya kembali seperti semula.

Sebagai contoh, katakanlah saya memiliki halaman bernama "perusahaan" dan saya mengubah judul menjadi "Perusahaan kami" (yang mengubah URL alias menjadi perusahaan kami). Kemudian saya memutuskan bahwa saya sebenarnya memilihnya dengan cara pertama sehingga saya mengedit simpul lagi dan mengubah judul kembali menjadi "Perusahaan". Pada saat itu pesan kesalahan " Ups, sepertinya permintaan ini mencoba membuat loop tak terbatas. Kami tidak mengizinkan hal-hal seperti itu di sini. Kami adalah situs web profesional! " Akan mulai muncul di halaman Perusahaan.

Ada tiga cara untuk memperbaikinya, tergantung pada apa yang paling mudah bagi Anda. Mereka berkisar dalam kesulitan / keberanian dari atas ke bawah.

Metode Drupal / PHP

Ada bug Drupal yang panjang pada subjek: Masalah # 1796596 dan ada tambalan yang berfungsi baik yang memperbaiki masalah dalam komentar # 124 .

Semoga perbaikan ini akan segera masuk ke modul Redirect untuk diunduh. Namun sudah lebih dari setahun sekarang tanpa ada tanda-tanda kemajuan di depan itu.

Metode SQL

Perbaikan tercepat untuk masalah ini adalah dengan query SQL ke database, dengan sesuatu seperti di bawah ini. HATI - HATI dan hanya coba metode ini jika Anda tahu apa yang Anda lakukan - cobalah pada pengembangan salinan situs pertama dan pastikan Anda memiliki cadangan dan menguji perubahan setelah itu jika Anda perlu memutar kembali. Berhati-hatilah dan uji kueri pertama dengan sangat baik jika Anda menggunakan i18n ... Jalankan kueri pertama untuk menunjukkan apa yang akan dihapus dan yang kedua untuk benar-benar melakukan penghapusan.

--Show records to be deleted:
SELECT r.rid, r.language, r.source, r.redirect
  FROM redirect r INNER JOIN url_alias u ON r.source = u.alias
         AND r.redirect = u.source AND r.language = u.language;

--Delete redirects shown in above query:    
DELETE r FROM redirect r INNER JOIN url_alias u ON r.source = u.alias
         AND r.redirect = u.source AND r.language = u.language;

Jika Anda tidak tahu cara menerapkan tambalan atau menjalankan kueri SQL, maka Anda harus memperbaiki masalah secara manual. Jangan khawatir, ini sebenarnya cukup mudah dilakukan (tetapi memakan waktu dibandingkan dengan metode lain):

Metode Manual:

Untuk setiap halaman tempat pesan peringatan ditampilkan:

  1. Edit halaman
  2. Gulir ke bagian bawah formulir edit
  3. Perhatikan URL utama halaman. Itu ditampilkan di bawah "pengaturan jalur URL", misalnya "Alias: company" akan berarti URL halaman adalah "perusahaan". Anda dapat mengklik "Pengaturan Jalur URL" untuk mengunjungi bagiannya dan mengonfirmasi alias URL jika Anda tidak yakin.
  4. Sekarang klik "URL redirect". Pengalihan ke halaman saat ini akan ditampilkan. Akan ada setidaknya satu pengalihan yang sama dengan alias URL yang Anda catat di langkah 3. Mungkin lebih dari satu pengalihan dalam daftar ini akan cocok dengan alias URL.
  5. Hapus semua arahan ulang yang sama dengan alias URL. Ini adalah data masalah yang menyebabkan perulangan dan pesan kesalahan ditampilkan.
  6. Setelah tidak ada lagi pengalihan di bawah "Pengalihan URL" yang sama persis dengan alias halaman masalah di bawah pengaturan jalur URL, pesan kesalahan akan hilang.
Profesor Falken
sumber
Metode SQL yang bagus! thx
rémy
Patch untuk mengarahkan ulang hampir siap untuk dirilis. Kupikir aku akan menyebutkannya.
Alfred Armstrong
1

Jika kita memiliki pengalihan yang sama ke alias node, cara lain untuk memperbaiki kesalahan ini adalah dengan menjalankan skrip yang melalui semua nid (dalam kasus node) dan melihat apakah alias dari setiap node memiliki pengalihan dengan nama yang sama, jika ada dihilangkan.

for ($i=1; $i<=10000; $i++) {
  $alias = drupal_get_path_alias("node/" . $i);
  $redirect = redirect_load_by_source($alias);
  if ($redireccion->rid> 0) {
    redirect_page_cache_clear($redirect);
    redirect_delete($redireccion->rid);
  }
}

Anda dapat menjalankan kode ini di opsi "Jalankan Kode PHP" dari menu pengembangan.

Formulir ini mirip dengan "Metode SQL" hanya saya menjalankan ini dari Drupal dan bukan pada database.

Alfredo Valdivieso
sumber
Ini bekerja dengan sempurna!
albertski
0

Buat skrip Drush:

<?php
// Set up the query using the database API
$query = db_select('redirect', 'r');
$query->join('url_alias', 'ua', 'r.redirect = ua.source AND r.source = ua.alias');
$query->fields('r', array('rid', 'redirect', 'source'));

// Execute it and fetch the results, one by one
$result = $query->execute();
$any_results = FALSE;
while($r = $result->fetchAssoc()) {
  // For each result, flag we've got at least one result, notify the CLI user
  // of what we're doing, and delete it using Redirect's own API
  $any_results = TRUE;
  drush_log(dt("Deleting unwanted redirect !r (!s -> !t)",
    array("!r" => $r['rid'], "!s" => $r['source'], "!t" => $r['redirect'])), "success");
  redirect_delete($r['rid']);
}

// No results? Report if that's the case
if (!$any_results) {
  drush_log(dt("Nothing to delete!"), "ok");
}

Simpan ke file dan jalankan dari dalam basis kode situs Anda menggunakan drush php-script [PATH_TO_SCRIPT], dan itu akan menghapus pengalihan yang berbenturan dengan alias alias URL.

Vyacheslav Trotsak
sumber
0

Bagaimana saya bisa mencegah menampilkan pesan kesalahan "redirect loop" di server produksi di masa depan? Saya telah menetapkan pelaporan kesalahan "tidak ada" di halaman ini - admin / config / development / logging

Jose D Jo
sumber
-2

Satu-satunya cara setelah mencoba banyak tambalan adalah membuka file redirect.module dan menghilangkan baris # 989

drupal_set_message('Oops, looks like this request tried to create an infinite loop. We do not allow such things here. We are a professional website!');
Gaperville
sumber
1
Jadi alih-alih memperbaiki loop pengalihan tak terbatas Anda hanya menghilangkan peringatan?
George
1
Walaupun saya melakukan hal semacam ini ketika saya masih anak-anak (sebelum saya tahu cara membuat kode), saya tidak merekomendasikan melakukan ini dalam kapasitas profesional apa pun. Bukan saja Anda tidak menyelesaikan masalah, Anda menyembunyikan satu-satunya indikator bahwa ada sesuatu yang salah!
colan
-2

Bahasa Inggris saya tidak terlalu bagus, tapi saya pikir Anda tidak masalah baca saya. Saya memiliki sebelum masalah itu dan saya menyelesaikannya sehingga saya menghapus modul REDIRECT. Salam Tim situs KoZnaZna - Simon

Koznazna Sajt
sumber
1
Menghapus modul Redirect tidak akan membantu Anda jika Anda memerlukan fitur-fiturnya.
colan