将nginx重写与许多单独的URL一起使用

时间:2012-10-08 15:54:59

标签: url-rewriting nginx rewrite

我需要在nginx上重写大量的URL(大约250个)。

来自:http://xyzwiki.de/wiki/index.php?title=Article1

至:http://wiki.zyx.de/wiki/AlternativeNameForArcticle1

显然,来源确实使用了经典网址以及单个文章的其他名称,我有一张包含所有来源和目的地的表格。

我尝试使用基本的重定向示例但是我没有让它工作。我认为原因可能是源URL使用了URL参数 - 但我没有找到解决方案。

所以我需要一个映射,我告诉nginx一堆源URL及其各自的重写目标。

1 个答案:

答案 0 :(得分:0)

就个人而言,我将使用auto_prepend_file工具在php中处理此问题。

有了这个,下面的代码块将在每个php调用运行,如果保存在服务器上的某个位置并且auto_prepend_file设置为加载它。

if ($_SERVER['SCRIPT_NAME'] == '/index.php') {
    // only proceed if this is the root index.php file 
    $title = $_GET['title'];
    $urlMap = array (
            'article1' => 'alternative1',
            'article2' => 'alternative2',
            'article3' => 'alternative3',
            ...
            'article250' => 'alternative250'
    );

    if (array_key_exists($title, $urlMap)) {
        // redirect to alternative url
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: http://wiki.zyx.de/wiki/" . $urlMap[$title]);
        exit;
    } else {
        // unset vars and continue otherwise
        unset($title);
        unset($urlMap); 
    }
}