Apache 使用mod#u rewrite重定向70+;带有变量的URL

Apache 使用mod#u rewrite重定向70+;带有变量的URL,apache,mod-rewrite,variables,Apache,Mod Rewrite,Variables,我正在建设一个网络喜剧网站,但章节顺序已经发生了重大变化。我已经以如下形式为自己手动编写了转换: 36->26.1 37->28 38->28.1 39->29 40->30 41->30.1 基本上,根据本指南,我想转换所有URL,如http://www.domain.com/view.php?chapter=38到较新的类型,如http://www.domain.com/c28.1 我还想确保那些请求页码的人,比如view.php?chapter=38&page=4将他们的页码传递给重定向,

我正在建设一个网络喜剧网站,但章节顺序已经发生了重大变化。我已经以如下形式为自己手动编写了转换:

36->26.1

37->28

38->28.1

39->29

40->30

41->30.1

基本上,根据本指南,我想转换所有URL,如
http://www.domain.com/view.php?chapter=38
到较新的类型,如
http://www.domain.com/c28.1

我还想确保那些请求页码的人,比如
view.php?chapter=38&page=4
将他们的页码传递给重定向,比如:
c28.1/p4.html

这看起来很简单,只是我要实现70个左右,我有点担心这是否会严重影响网站性能(70个太多了?),并且无法正确重写漫画和页面变量

所以我的问题是,我如何做到这一点,我的最佳解决方案是什么?如果性能没有问题,我更愿意将它与我的其他mod_重写代码一起保存在.htaccess中,但是如果唯一合理的方法是编写一个.php脚本并调用它来执行重定向,我可以做到这一点——尽管我真的不知道如何让php做到这一点

请记住,提到的70个左右是我唯一拥有的,所以我不想建立一个容易访问的数据库。我只想重定向工作,以最小的麻烦

如有任何回应,我将不胜感激。如果有人能帮我解决这个问题,请提前感谢。

我认为一种更轻松的方法(就.htaccess文件中的行而言)是,如您所述,使用.htaccess来处理URL,如:

RewriteRule ^c([0-9]+)$ view.php?chapter=$1  
RewriteRule ^c([0-9]+).([0-9]+)$ view.php?chapter=$1&section=$2  
RewriteRule ^c([0-9]+).([0-9]+)/p([0-9]+).html$ view.php?chapter=$1&section=$2&page=$3
然后将它们映射到处理单个内容的php脚本

我可以建议您,您还应该使用301重定向规则映射所有旧url,以便允许来自搜索引擎serp的用户重定向到内容的正确新url


希望这能有所帮助。

我最终咨询了freenode#httpd的优秀员工,并找到了解决方案。对我来说,因为我只想捕获view.php的请求,所以我发现只需编写一个view.php脚本来收集数组中的内容就可以了。不需要修改。我现在使用的脚本如下所示:

<?

$chapters = array(
    // old => new
    1   => 2,
    2   => 3,
    3   => 4,
    10  => 21
);

if (! isset($_GET['chapter']) || ! isset($chapters[$chapter = (int)$_GET['chapter']])) {
    header('HTTP/1.1 404 Not Found');
    echo 'Page Not Found';
    exit;
}

$url = '/c' . $chapters[$chapter];
if (isset($_GET['page']))
    $url .= '/p' . $_GET['page'] . '.html';

header('Location: ' . $url, 301);

?>


不过,谢谢你的帮助,gh3。

哦,我已经有了这样一个角色。为了澄清这一点,旧的URL看起来像
view.php?chapter=1&page=3
`view.php?chapter=1',没有任何修改技巧,但新的URL(格式为
c1/p1.html
实际上重定向到了
viewer.php?chapter=1&page=1
)在新漫画展示脚本名称的末尾,只是为了让事情不那么混乱,因为我计划在未来制作这个大地图。上面的代码似乎是启用更漂亮的
/c1/p1.html
URL的代码,我已经有了它。所以这并不能真正解决我的问题。。