Yol takma adı yönlendirme döngüsü oluşturur veya ön sayfaya yönlendirme yapar


11

Sitemizi "www.example.com/contact-us" olarak adlandırdığımda şu hatayı alıyorum:

Hata! Bu istek sonsuz bir döngü oluşturmaya çalıştı. Burada böyle şeylere izin vermiyoruz. Biz profesyonel bir web sitesiyiz!

Siteyi "www.example.com/node/5" ile ararsam, iletişim sayfası gayet iyi görüntülenir.

/ Admin / config / search / path / edit / 6 üzerindeki yol takma adını kontrol ettiğimde, sistem yolu ve takma ad doğru ayarlanmış.

Başka bir takma ad için başka bir sorun daha var, "www.example.com/staff" adını verdiğimde "www.example.com" açılış sayfasına yönlendiriliyorum. Bir kez daha takma ad doğru ayarlanmış.

Drupal 7 ve i18n_redirect ve redirect modüllerini kullanıyoruz.


Sanırım buldum: "www.example.com/admin/config/search/redirect" de bu URL'leri yönlendiren girişler vardı. Oraya nasıl geldiklerini bilmiyorum ...
Matthias

Yanıtlar:


19

Sayfanızı düzenleyin ve URL yönlendirmelerine gidin . En fazla sayıya sahip yönlendirme yolunu bulun ve silin. Kaydet'i tıklayın ve sayfayı görüntüleyin.

Sorununuzu çözüp çözmediğini bana bildirin


Ben benzer bir sorun yaşıyorum ve bu bireysel düğümler için şeyler giderirken ben ilk etapta bu neden başlamak için neden bulamaya neden anlamaya çalışıyorum.
Altın

8

Güncelleme: Drupal sayısı # 1796596 , Redirect 1.0-rc2 (Haziran 2015) itibariyle işlendi. Bu sorun için doğru çözüm, Redirect modülünün en son kararlı sürümüne yükseltmek ve ardından veritabanı güncellemelerini çalıştırmaktır. Sahip olduğunuz dairesel yönlendirmeler güvenle temizlenir.

Bu sorun, yönlendirme modülündeki bir hata nedeniyle ortaya çıktı. Bir sayfanın URL'sini değiştirerek (veya yalnızca pathauto kullanıyorsanız başlığını) ve ardından eskisi gibi değiştirerek tetiklersiniz.

Örneğin, "şirket" adında bir sayfam olduğunu ve başlığını "Şirketimiz" olarak değiştirdim (URL takma adını şirketimize değiştirdi). Sonra ilk yolu tercih ettiğime karar verdim, bu yüzden düğümü tekrar düzenleyip başlığı tekrar "Şirket" olarak değiştirdim. Bu noktada " Hata, bu istek sonsuz bir döngü oluşturmaya çalıştı. Bu tür şeylere izin vermiyoruz. Biz profesyonel bir web sitesiyiz! " Şirket sayfasında görünmeye başlayacaktır.

Sizin için en kolay olana bağlı olarak bunu düzeltmenin üç yolu vardır. Yukarıdan aşağıya zorluk / cesaret içinde değişirler.

Drupal / PHP yöntemi

Konuyla ilgili uzun bir Drupal hatası var: Sayı # 1796596 ve 124 numaralı yorumda sorunu çözen iyi bir çalışma yaması var .

Umarım bu düzeltme yakında indirilecek Redirect modülüne girecektir. Ancak bu cephede ilerleme kaydedilmeden bir yıldan fazla bir süre geçti.

SQL yöntemi

Sorunun en hızlı çözümü, veritabanına bir SQL sorgusu ile aşağıdaki gibi bir şeydir. DİKKATLİ OLUN ve bu yöntemi yalnızca ne yaptığınızı biliyorsanız deneyin - önce sitenin bir geliştirme kopyasında deneyin ve bir yedeğiniz olduğundan emin olun ve geri almanız gerektiğinde değişiklikleri hemen test edin. Ekstra dikkatli olun ve i18n kullanıyorsanız ilk sorguyu çok iyi test edin ... Nelerin silineceğini göstermek için ilk sorguyu ve aslında silme işlemini yapmak için ikinci sorguyu çalıştırın.

--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;

Yamaları nasıl uygulayacağınızı veya SQL sorgularını nasıl çalıştıracağınızı bilmiyorsanız, sorunu manuel olarak düzeltmeniz gerekir. Endişelenmeyin, bu aslında oldukça kolaydır (ancak diğer yöntemlere kıyasla zaman alıcıdır):

Manuel Yöntem:

Uyarı mesajının görüntülendiği sayfaların her biri için:

  1. Sayfayı düzenleyin
  2. Düzenleme formunun en altına gidin
  3. Sayfanın ana URL'sini not edin. "URL yolu ayarları" altında gösterilir, örneğin "Takma ad: şirket", sayfanın URL'sinin "şirket" olduğu anlamına gelir. Bölümünü ziyaret etmek ve emin değilseniz URL takma adını onaylamak için "URL Yolu Ayarları" nı tıklayabilirsiniz.
  4. Şimdi "URL yönlendirmeleri" ni tıklayın. Geçerli sayfaya yönlendirmeler gösterilecektir. 3. adımda not ettiğiniz URL takma adıyla aynı olan en az bir yönlendirme olacaktır. Bu listedeki birden fazla yönlendirme URL takma adıyla eşleşebilir.
  5. URL takma adıyla aynı olan tüm yönlendirmeleri silin. Bunlar, döngü ve hata iletisinin görüntülenmesine neden olan sorun verileridir.
  6. "URL yönlendirmeleri" altında, sorunlu sayfanın URL yolu ayarları altındaki URL takma adıyla tam olarak eşleşen başka yönlendirme olmadığında, hata mesajı kaldırılır.

iyi çalışma SQL yöntemi! thx
rémy

Yönlendirme yaması hemen hemen yayınlanmaya hazırdır. Sadece bundan söz edeceğimi düşündüm.
Alfred Armstrong

1

Düğümün takma adına aynı yeniden yönlendirme varsa, bu hatayı düzeltmenin başka bir yolu, tüm nid (düğümlerde) aracılığıyla bir komut dosyası çalıştırmak ve her düğümün diğer adının aynı ada sahip bir yeniden yönlendirmeye sahip olup olmadığını görmek. elimine edilir.

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);
  }
}

Bu kodu geliştirme menüsünden "PHP Kodunu Yürüt" seçeneğinde çalıştırabilirsiniz.

Bu form "SQL yöntemi" benzer sadece ben veritabanında değil, Drupal yürütmek.


Bu mükemmel çalıştı!
albertski


0

Drush komut dosyası oluşturun:

<?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");
}

Dosyayı bir dosyaya kaydedin ve sitenizin kod tabanından kullanarak çalıştırın drush php-script [PATH_TO_SCRIPT]ve URL takma adlarıyla çakışan yönlendirmeleri silecektir.


0

Gelecekte üretim sunucusunda "yönlendirme döngüsü" hata iletisinin görüntülenmesini nasıl önleyebilirim? Zaten bu sayfada "yok" hata bildirimi ayarladım - admin / config / development / logging


-2

Birçok yamalı denedikten sonra tek yön redirect.module dosyasını açmak ve # 989 satırını atlamaktı

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!');

1
Sonsuz yönlendirme döngüsünü düzeltmek yerine, uyarıyı atladınız mı?
George

1
Çocukken bu tür bir şey yapmama rağmen (nasıl kod yazacağımı bilmeden önce), bunu herhangi bir profesyonel kapasitede yapmanızı önermiyorum. Sadece sorunu çözmekle kalmayıp, bir şeyin yanlış olduğuna dair tek göstergeyi saklıyorsunuz!
colan

-2

İngilizcem çok iyi değil, ama sanırım beni okuyamazsın. Bu sorundan önce var ve çözdüm, böylece REDIRECT modülünü kaldırdım. Saygılarımızla, KoZnaZna sitesi Ekibi - Simon


1
Özelliklerine ihtiyacınız varsa, Yönlendirme modülünü kaldırmak size yardımcı olmaz.
colan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.