在404上使用PHP和MySQL进行301重定向
我正在将一个500多页的大型静态网站转移到Joomla安装中,但我想做的不是编写一个500多行的.htaccess文件,而是使用PHP内置的301头重定向来动态重定向进入新URL的请求 例如,在我移动站点之后,下面的URL将在没有重定向的情况下为404- 我希望它重定向到在404上使用PHP和MySQL进行301重定向,php,mysql,apache,redirect,http-status-code-301,Php,Mysql,Apache,Redirect,Http Status Code 301,我正在将一个500多页的大型静态网站转移到Joomla安装中,但我想做的不是编写一个500多行的.htaccess文件,而是使用PHP内置的301头重定向来动态重定向进入新URL的请求 例如,在我移动站点之后,下面的URL将在没有重定向的情况下为404- 我希望它重定向到 http://www.foo.com/old-page.php 因此,我想创建一个包含旧URL及其对应的新URL的MySQL数据库,然后,如果服务器要返回404,则首先检查数据库中现有的旧URL,如果匹配,则向新URL发出
http://www.foo.com/old-page.php
因此,我想创建一个包含旧URL及其对应的新URL的MySQL数据库,然后,如果服务器要返回404,则首先检查数据库中现有的旧URL,如果匹配,则向新URL发出301重定向。对,我在这里讲得通吗
我该怎么做?我可以“谈论”逻辑,但不确定从何处开始或如何完成,因为虽然我理解PHP,但我并不真正理解这将如何与Apache一起工作(或者甚至不知道它会如何工作,例如…)
如果您知道有任何脚本已经在这样做了,那就更好了。与其创建数据库,为什么不直接将重定向放在带有旧URL(即old_page.html)的页面中呢 由于您显然是在数据库条目的基础上逐个执行此操作,所以您可以在页面的基础上逐个执行此操作
您可以编写一个快速的perl脚本或任何您想为您生成这些html页面的东西,只要给定一个旧页面的名称和新页面的URL。与其创建一个数据库,为什么不直接将重定向放入一个带有旧URL的页面(即old_page.html) 由于您显然是在数据库条目的基础上逐个执行此操作,所以您可以在页面的基础上逐个执行此操作
您可以编写一个快速的perl脚本或任何您想为您生成这些html页面的内容,只要给定一个旧页面的名称和新页面的URL。在Apache配置中,为您喜欢的/404handler.php脚本设置一个ErrorDocument。在其运行上下文中,$\u SERVER['REQUEST\u URI']将是请求的原始页面的URI。执行数据库查找,如果找到要重定向的页面,请使用标题(“Location:.where.$where)重定向到该页面。在Apache配置中,设置所需/404handler.php脚本的ErrorDocument。在其运行上下文中,$\u SERVER['REQUEST\u URI']将是请求的原始页面的URI。进行数据库查找,如果找到要重定向的页面,请使用标题(“Location:.$where)重定向到该页面。我能想到的最简单的方法是使用(链接到一个很棒的介绍教程)将所有传入的请求重定向到一个PHP脚本(或者使用一个标志,这样只有当请求的文件不存在时才会发生重定向),请求的地址作为查询字符串的一部分传递。从那里,让PHP脚本查找该请求应该到达的位置,并重定向到它
因此,如果有人试图打开,mod_rewrite会发送到.redirect.php之类的文件,然后进行数据库查找,查看“old_page.html”的新地址,并重定向到那里。我能想到的最简单的方法是使用(链接到一个很棒的介绍教程)将所有传入的请求重定向到一个PHP脚本(或者使用一个标志,使此重定向仅在请求不存在的文件时发生),请求的地址作为查询字符串的一部分传递。从那里,让PHP脚本查找该请求应发往的位置,并重定向到它 因此,如果有人试图打开,mod_rewrite会发送到.redirect.php之类的文件,然后进行数据库查找,查看“old_page.html”的新地址,并重定向到那里。您还可以使用: 但您需要在httpd.conf(或虚拟主机配置)中定义该映射: 然后,您可以在.htaccess文件中使用该映射:
RewriteCond ${oldtonew:$1} .+
RewriteRule ^(.*)\.html$ /%0.html [L,R=301]
您还可以使用:
但您需要在httpd.conf(或虚拟主机配置)中定义该映射:
然后,您可以在.htaccess文件中使用该映射:
RewriteCond ${oldtonew:$1} .+
RewriteRule ^(.*)\.html$ /%0.html [L,R=301]
RewriteCond ${oldtonew:$1} .+
RewriteRule ^(.*)\.html$ /%0.html [L,R=301]