Bu durumda bir 301 yönlendirmesi sorunu en iyi yolu nedir?

3 Cevap php

Ben de bulunan bir PHP5/Zend Framework 1.8.1 web sitesi var:

http://www.example.com/foo

Infuriatingly hala google indeksi ile korunur, bu sitenin eski sürümü yer oldu:

http://www.example.com/foo/DEFAULT.ASP

Yani bir sürü insan yukarıdaki bağlantıyı talep eden ve bir çıkmaz isabet vardır.

Ben, bu yeni siteye onu almak için 301 yönlendirme sorunu olacaktır düzeltmek için bir yol bulmalısınız. Akla bahar Bunu yapmanın iki yolu vardır:

  1. Ben düşündüm ilk yolu bizim. Htaccess bir yeniden yazma kuralı eklemek oldu. Sitemiz uygulama PHP5 / Zend Framework 1.8.1, yani (Zend Framework MVC şartının gibi) htaccess varolan yazma kuralı var.:

    RewriteRule !\.(js|ico|gif|jpg|png|css|jpeg)$ index.php
    

    Bir mod_rewrite çaylak olarak, Googling biraz yaptım ve yönlendirme işlemek için aşağıdaki ile geldi:

    RewriteCond %{HTTP_HOST} ^/foo/DEFAULT.ASP
    RewriteRule (.*) http://example.com/foo$1 [R=301,L]
    

    Ben. Htaccess için bu satırları ekledim, ama onlar çalışmaz.

  2. Ben düşündüm ikinci yolu aşağıdaki gibi Zend_Router_Route_Static kullanmaktır:

    $router = $frontController->getRouter();
    $route = new Zend_Controller_Router_Route_Static('foo/DEFAULT.ASP', array('controller' => 'foo', 'action' => 'index'));
    $router->addRoute('foo', $route);
    

    Bu doğru sayfaya yönlendirir, ama ben de bir 301 başlığı ayarlamak için nasıl hiçbir fikrim yok, artı benim bootstrap.php kod bu satırları sahip oldukça zarafetsiz bulunuyor

Herkes bu durumla nasıl başa çıkılacağı konusunda herhangi bir tavsiye edebilir miyim? Ben tümünü veya herhangi bilmek istiyorum:

  1. Yazma kuralı işe almak için nasıl
  2. How to do a '301' with Zend_Controller_Router_Route if possible.
  3. Is there another way that I'm missing?
  4. Iyi bir yol ve neden hangisidir?
  5. Why isn't google figuring this out? It has been nearly half a year.

3 Cevap

Bu işe (eğer Zend kuralı önce koymak emin olun) olmalıdır:

RewriteRule ^foo/DEFAULT.ASP /foo [R=301,L]

Google onu bulmaktan değil neden emin değilim - Eğer uygun bir 404 durum kodu veriyorsun emin misin? Sen başlıklarına bakarak kontrol edebilirsiniz - Firefox Kullandığım Live HTTP Headers.

Geçenlerde ekleyerek benzer bir sorunu çözmüş

AddType application/x-httpd-php .asp

php ile sunucu çalıştırmak. asp dosyaları yapar. htaccess dosyasına.

Google arıyordu birini değiştirmem: Sonra başlığını içeren bir dosya default.asp (vb '/ Yer') yarattı. Ben bir veritabanı arama gerektiren bazı durumlarda, yönlendirmeden önce yeni URL'ler dönüştü gereken karmaşık parametreleri ile birkaç başka. Asp dosyaları vardı, bu yüzden PHP her şeyi yazmak mümkün kullanışlı ben kullanmak verebilecek diğer bölgelerinden gelen dosyaları içerir Projenin.

Eğer sorunu çözmüş gibi görünüyor, ve bu konuda iyi bir çözüm olmaz, ama burada sorunuza bu konuya çekti başkalarının yarayabilecek başka bir kaynak var:

http://www.refreshinglyblue.com/2008/10/28/zend-framework-redirect-the-easy-way/

O iç URL'ler yönlendirmek için "Yönlendirici Zend Kontrol Eylem Yardımcısı" önerdiğini.

P.S. Herkes _redirect kullanın yoksa (ki istediğiniz buysa), 302 için bu varsayılan beri 301 yönlendirme kodu geçmek emin olun.