Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Regex 你能重写数学吗?_Regex_Apache_Mod Rewrite - Fatal编程技术网

Regex 你能重写数学吗?

Regex 你能重写数学吗?,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,我计划将我的网站转换成一个新的CMS,但我想使用mod_rewrite将旧链接无缝地重定向到它们的新位置 问题是,我的新博客不会有与旧博客相同的文章编号,因为我将在第一篇文章中导入一些旧的博客条目。因此,我的mod_rewrite需要使用像old.php?article=125这样的URL,进行加法以计算出新的文章编号(例如+200),并重定向到new.php?i=325 mod_rewrite能自己做加法吗,或者我需要某种“助手”脚本来做吗?我相信这是推动“巫毒魔法”的力量,即mod_rewr

我计划将我的网站转换成一个新的CMS,但我想使用mod_rewrite将旧链接无缝地重定向到它们的新位置

问题是,我的新博客不会有与旧博客相同的文章编号,因为我将在第一篇文章中导入一些旧的博客条目。因此,我的mod_rewrite需要使用像
old.php?article=125
这样的URL,进行加法以计算出新的文章编号(例如+200),并重定向到
new.php?i=325


mod_rewrite能自己做加法吗,或者我需要某种“助手”脚本来做吗?

我相信这是推动“巫毒魔法”的力量,即
mod_rewrite
。我要么设计一个助手脚本来跟进这一点,要么在数据库级别实际迁移旧条目


后者将为您提供更好的稳定性和对系统布局的控制。所有旧条目都会有新的post id,所有内容都应该无缝匹配。

它无法计算。也许你想用一个。Mod rewrite可以做正则表达式。如果您可以将新文章的值定义为相同的id加上1000,那么:

rewriteRule /article=(\d{1})$ /new.php?i=100$1
rewriteRule /article=(\d{2})$ /new.php?i=10$1
rewriteRule /article=(\d{3})$ /new.php?i=1$1

一种选择是完全忘记
.htaccess
文件中的旧链接。相反,构建一个自定义的
404notfound
错误页面,并将Apache配置为在断开的链接上提供服务。该页面将是一个PHP脚本,它将根据简单表达式测试
$\u服务器['REQUEST\u URI']
变量:

<?php

if( substr($_SERVER['REQUEST_URI'], 0, 7)=='old.php' ){
    // Old link found!
}

?>

在“找到旧链接”条件内,您可以进行进一步处理:

  • 运行正则表达式以查找项目ID
  • 对其进行数学运算,并尝试将其与新ID匹配
  • 使用header()执行永久重定向

  • 因为为了一个目的有三条重写规则是很明智的。但这就是工作的完成,对吧;)这有点错误,因为我在模式的末尾忘了一美元(我修正了它),我确实想到了这一点,我可能会在1000后开始导入帖子。(另外,这会让我看起来像一个多产的作家!)+1对于克里夫尼,我喜欢这个想法,尽管可能有更快/更简单的方法。我想知道是否可以覆盖web主机上的默认错误处理程序?嗯…到目前为止,我已经能够在我所有的托管帐户中使用ErrorDocument。我喜欢这种方法,因为它不会为有效链接添加额外的重载,而有效链接通常占绝大多数。我喜欢这种解决方案,但如果你需要301重定向来进行seo??这个解决方案会不会先给你一个404,然后告诉谷歌这个页面不存在???@FeidaKila-PHP让你完全控制HTTP头,包括状态代码。阅读有关函数的更多详细信息。我知道header函数,但我想在通过PHP的header()函数执行301重定向之前,apache会给出404响应(通过Errordocument)。我错了吗??我应该用browserAh检查一下,但是我希望从ID0开始导入几百篇旧帖子,然后从停止的地方导入更新的帖子集(来自不同的CMS)。但正如Schlaviener所指出的,我可以在1000开始第二批导入,然后重写规则很简单,比如137=>1137。@ewall:花几个小时将数据整理到表中是值得的,不必依赖于
    mod_rewrite
    之类的东西。