代码之家  ›  专栏  ›  技术社区  ›  karim79

在这种情况下,发出301重定向的最佳方式是什么?

  •  1
  • karim79  · 技术社区  · 16 年前

    我有一个PHP5/Zend Framework 1.8.1网站,位于:

    http://www.example.com/foo
    

    令人恼火的是,该网站的旧版本仍然由谷歌的索引维护,位于:

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

    所以很多人都在请求上面的链接,结果走到了死胡同。

    我想,解决这个问题的方法是发布301重定向,将他带到新站点。让我想到的两种方法是:

    1. 我想到的第一种方法是在.htaccess中添加重写规则。我们的站点实现是PHP5/Zend Framework 1.8.1,因此.htaccess中有一个现有的重写规则(根据Zend Framework MVC要求),即:

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

      作为一个mod_rewrite noob,我在谷歌上搜索了一下,找到了以下方法来处理重定向:

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

      我将这些行添加到.htaccess,但它们不起作用。

    2. 我想到的第二种方法是使用 Zend_Router_Route_Static 详情如下:

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

      bootstrap.php

    有人能就如何处理这种情况提供一些建议吗?我想了解以下所有或任何信息:

    1. 如何使重写规则起作用
    2. 如何使用“301” Zend_Controller_Router_Route 如果 可能的
    3. 丢失的
    4. 哪种方法更好?为什么?
    5. 已经快半年了。
    4 回复  |  直到 16 年前
        1
  •  2
  •   Greg    16 年前

    这应该有效(请确保将其放在Zend规则之前):

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

    我不知道为什么谷歌没有弄明白——你确定你给出了正确的404状态码吗?您可以通过查看我使用的Firefox中的标题进行检查 Live HTTP Headers .

        2
  •  2
  •   Steve    16 年前

    我最近通过添加

    AddType application/x-httpd-php .asp
    

    然后我创建了一个包含头('Location:/'等)的文件default.asp,以替换Google正在寻找的文件。我还有一些其他的.asp文件,这些文件带有复杂的参数,在重定向之前需要转换成新的URL,在某些情况下需要数据库查找,因此能够用PHP编写所有内容非常方便,这样我就可以使用项目其他部分的include文件。

        3
  •  1
  •   duckyflip    16 年前
    Redirect permanent /foo/DEFAULT.ASP /foo
    
        4
  •  1
  •   joedevon    16 年前

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

    他建议“重定向器Zend控制器操作助手”重定向内部URL。

    另外,如果有人使用_redirect,请确保传入301重定向代码(如果您需要的话),因为它默认为302。

    推荐文章