静态站点中的批量内部链接重定向方法

时间:2015-03-20 07:22:29

标签: php html mysql .htaccess redirect

我有一个包含大约1500多页的静态网站。这些HTML页面中的每一个都有一个内部链接(我的意思是在页面本身上编码),我想用一个新链接替换它。

但是,不可能编辑所有这些页面,因为有数千页。

以下是一个例子:

  • 说我有一个页面www.example.com/page.html
  • 该页面上有一个指向www.abc.com
  • 的超链接
  • 我希望此链接替换/重定向为www.xyz.com而不是www.abc.com

我已经拥有一个MySQL表,其中包含所有当前链接和两列中的新链接。

有没有办法使用.htaccess文件,PHP和MySQL重定向所有这些链接?如果有可能那么代码是什么样的?

2 个答案:

答案 0 :(得分:1)

我找到了一种使用此脚本更改所有链接的方法。

<?php
require_once("connection.inc.php");

function get_value($file){
    //$html = file_get_contents($file,true);
    $dom = new DOMDocument('1.0');
    $dom->loadHTMLFile($file);
    $xpath = new DOMXPath($dom);
    $nodes = $xpath->query('//a/@href');
    foreach($nodes as $href) {
        return $href->nodeValue;            // echo current attribute value
        //$href->nodeValue = 'new value';   // set new attribute value
        //$href->parentNode->removeAttribute('href');  // remove attribute
    }
}

function put_value($file,$pattern){
    //$html = file_get_contents($file,true);
    $dom = new DOMDocument('1.0');
    $dom->loadHTMLFile($file);
    $xpath = new DOMXPath($dom);
    $nodes = $xpath->query('//a');
    $nodes->item(0)->setAttribute("href",$pattern);
    $dom->save($file);
}

$dir   = new RecursiveDirectoryIterator(__DIR__);
$flat  = new RecursiveIteratorIterator($dir);
$files = new RegexIterator($flat, '/\.html$/i');

foreach($files as $file) {
    $value=get_value($file);
    $query=mysql_query("SELECT new_links FROM site WHERE current_links='$value'");
    if(mysql_num_rows($query)==1){
        $value_orginal = mysql_result($query,0);
        put_value($file,$value_orginal);
        echo "The ".$file." has changed to ".$value."</br>";
    }
    else{
        die("die baby die :)");
    }
}
?>

答案 1 :(得分:0)

您可以使用htaccess重定向 Redirect to a Different URL using .htaccess