我有一个PHP5 / Zend Framework 1.8.1网站,位于:
http://www.example.com/foo
此网站的旧版本,令人愤怒,仍由谷歌索引维护,位于:
http://www.example.com/foo/DEFAULT.ASP
所以很多人都要求上面的链接并且走向死胡同。
我认为,解决此问题的方法是发出301重定向以将他带到新网站。我想到的两种方法是:
我想到的第一种方法是向.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中,但它们不起作用。
我想到的第二种方法是使用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
有人可以就如何处理这种情况提出任何建议吗?我想知道所有或任何一个:
Zend_Controller_Router_Route
如果
可能的。答案 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.