我正在使用mod_rewrite和一个php脚本横穿1200个网址。
问:没有php脚本,有没有办法做同样的事情?
我将论坛从YaBB(Perl)迁移到SMF(php)。迁移导致外部链接进入的网址发生了变化。我有1200个交叉的数字。为了讨论,其中的5个示例
old_id new_id
1135287707 1
1135313823 2
1135313961 3
1135314073 4
1135314194 5
我要mod_rewrite
做的[301]翻译如下
old: www.host.com/widgets/forum/YaBB.pl?num=<old_id>
new: www.host.com/widgets/forum/?topic=<new_id>
我不确定mod_rewrite如何或是否可能直接使用交叉表。目前,我正在使用两个步骤,一个重写以运行脚本。
.htaccess位于“论坛”目录中
Options +FollowSymLinks
RewriteEngine on
RewriteCond "%{QUERY_STRING}" "num="
RewriteRule "YaBB\.pl" "redirect.php"
重写效果是
from: www.host.com/widgets/forum/YaBB.pl?num=<old_id>
to: www.host.com/widgets/forum/redirect.php?num=<old_id>
运行重定向脚本。该脚本将人行横道数据存储在一个数组中,如下所示:
<?php
if (!array_key_exists('num', $_GET)) {
header('Location: https://www.host.com/widgets/forum'); // no number, goto main page
return;
}
// got a number, check it for cross-walk
$crosswalk = [
1135287707 => 1,
1135313823 => 2,
1135313961 => 3,
1135314073 => 4,
1135314194 => 5,
... 1200 more ...
];
$num = $_GET['num'];
if (array_key_exists($num, $crosswalk)) {
$new_id = crosswalk[$num];
header("Location: https://www.host.com/widgets/forum/?topic=$new_id", 301); // redirect to new url
}
else {
header('Location: https://www.host.com/widgets/forum'); // no crosswalk, goto main page
}
?>
还有其他更有效的人行横道机制吗?
答案 0 :(得分:0)
我们在服务器上执行的操作是创建RewriteRules并将其放入.htaccess中,它可能不是最干净的解决方案,但是它全部由apache处理。您可能想要创建简单的脚本来生成规则,然后将其放入网站根目录的.htaccess中。
列表将类似于
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135287707$ http://www.host.com/widgets/forum/?topic=1 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135313823$ http://www.host.com/widgets/forum/?topic=2 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135313961$ http://www.host.com/widgets/forum/?topic=3 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135314073$ http://www.host.com/widgets/forum/?topic=4 [R=301,L]
RewriteRule ^widgets/forum/YaBB\.pl\?num=1135314194$ http://www.host.com/widgets/forum/?topic=5 [R=301,L]
如果没有匹配项,您还希望以重定向结束
RewriteRule ^widgets/forum/YaBB\.pl\?num= http://www.host.com/widgets/forum [R=301,L]