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

时间:2009-05-27 08:48:24

标签: php zend-framework mod-rewrite http-status-code-301

我有一个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);
    

    这会重定向到正确的页面,但我不知道如何设置301标题,而且在bootstrap.php

  3. 中使用这些代码行非常不优雅

    有人可以就如何处理这种情况提出任何建议吗?我想知道所有或任何一个:

    1. 如何让重写规则起作用
    2. 如何用'301'做 Zend_Controller_Router_Route如果 可能的。
    3. 我还有另一种方式吗? 丢失?
    4. 哪种方式更好,为什么?
    5. 为什么谷歌没有搞清楚这一点? 已经快半年了。

4 个答案:

答案 0 :(得分:2)

这应该有效(确保你把它放在Zend规则之前):

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

我不确定为什么谷歌没有搞清楚 - 你确定你提供了正确的404状态代码吗?您可以通过查看标题进行检查 - 在Firefox中我使用Live HTTP Headers

答案 1 :(得分:2)

我最近通过添加

解决了类似的问题
AddType application/x-httpd-php .asp

到.htaccess文件,它使服务器用php运行.asp文件。

然后我创建了一个包含标题的文件default.asp('Location:/'等)来替换Google正在寻找的标题。我有一些其他.asp文件,其中包含复杂参数,需要在重定向之前转换为新的URL,在某些情况下需要数据库查找,因此可以方便地在PHP中编写所有内容,以便我可以使用其他部分的包含文件该项目。

答案 2 :(得分:1)

Redirect permanent /foo/DEFAULT.ASP /foo

答案 3 :(得分:1)

看起来你解决了你的问题,这对你的问题来说不是一个好的解决方案,但是如果他们被你的问题吸引到这个线程,那么其他人可能会觉得有用的其他资源:

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

他建议重定向内部网址的“Redirector Zend Controller Action Helper”。

P.S。如果有人使用_redirect,请确保传入301重定向代码(如果这是你想要的),因为它默认为302.