Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在404上使用PHP和MySQL进行301重定向_Php_Mysql_Apache_Redirect_Http Status Code 301 - Fatal编程技术网

在404上使用PHP和MySQL进行301重定向

在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发出

我正在将一个500多页的大型静态网站转移到Joomla安装中,但我想做的不是编写一个500多行的.htaccess文件,而是使用PHP内置的301头重定向来动态重定向进入新URL的请求

例如,在我移动站点之后,下面的URL将在没有重定向的情况下为404-

我希望它重定向到

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]