1

我有一个 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 菜鸟,我做了一些谷歌搜索,并提出了以下处理重定向的方法:

    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

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

  1. 如何让重写规则起作用
  2. Zend_Controller_Router_Route如果可能的话,如何做一个'301' 。
  3. 还有另一种我想念的方式吗?
  4. 哪种方法更好,为什么?
  5. 为什么谷歌不解决这个问题?已经快半年了。
4

4 回答 4

2

我最近通过添加解决了类似的问题

AddType application/x-httpd-php .asp

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

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

于 2009-06-04T21:05:58.183 回答
2

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

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

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

于 2009-05-27T08:52:30.680 回答
1

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

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

他建议使用“Redirector Zend Controller Action Helper”来重定向内部 url。

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

于 2009-06-09T05:02:48.297 回答
1
Redirect permanent /foo/DEFAULT.ASP /foo
于 2009-05-27T08:56:24.667 回答