我正在将500多页的大型静态网站转移到Joomla安装,但我想要做的,而不是代码500 +行.htaccess文件,是使用内置301头redirect的PHP来dynamicredirect请求到新的url。
因此,举例来说,我移动网站后,下面的URL将404没有redirect –
http://www.foo.com/old_page.html
我希望它redirect到
http://www.foo.com/old-page.php
所以我想创build一个旧的URL的MySQL数据库及其相应的新URL,然后,如果服务器将返回一个404,首先检查数据库的现有旧URL,如果匹配,发出一个301redirect到新的URL。 对,我在这里有意义吗?
我该怎么做? 我可以“谈论”逻辑,但不知道从哪里开始或如何实现它,因为虽然我理解PHP,但我并不真正理解这将如何与Apache协同工作(或者即使它会例如…) ?
如果你知道任何脚本已经在做这个,那就更好了。
在你的Apache配置中,设置你喜欢的任何/404handler.php脚本的ErrorDocument。 在运行上下文中, $ _SERVER ['REQUEST_URI']将是请求的原始页面的URI。 做你的数据库查找,如果你找到一个你想要重定向的页面,使用header(“Location:”。$ where)来重定向到它。
我能想到的最简单的方法是使用mod_rewrite (链接是一个很好的入门教程)将所有传入的请求重定向到一个PHP脚本(或者使用一个标志,以便只有在请求是针对某个文件不存在),请求的地址作为查询字符串的一部分传递。 从那里,让PHP脚本查找请求应该去的地方,然后重定向到它。
所以如果有人试图打开http://www.foo.com/old_page.html,mod_rewrite会发送到http://www.foo.com/redirect.php?page=old_page.html 。 redirect.php然后执行数据库查找,查看“old_page.html”的新地址是什么,然后重定向到那里。
而不是创建一个数据库,为什么不把一个重定向到旧网址的页面(即old_page.html)?
由于您明显是在数据库条目的基础上进行个案分析,因此您可以根据具体情况在网页中进行处理。
你可以写一个快速的Perl脚本或任何你喜欢给你生成这些HTML页面给你一个旧的页面的名称和新页面的URL。
你也可以使用RewriteMap
:
old_page new-page # …
但是你需要在你的httpd.conf(或虚拟主机配置)中定义这个映射:
RewriteMap oldtonew txt:/path/to/file/map.txt
然后你可以在你的.htaccess文件中使用这个地图:
RewriteCond ${oldtonew:$1} .+ RewriteRule ^(.*)\.html$ /%0.html [L,R=301]