我可以在RewriteRule中做一个简单的计算吗?

网站结构的变化意味着网站需要更改

site/11-foo/21-bar 

 site/1-foo/1-bar 

即我想用RewriteRule从第二个参数中的整数中减去一个常量(在本例中为10),在第三个参数中从整数中减去另一个常量(在本例中为20)。

这些简单的计算可​​以节省数百万个需要处理的301redirect。 有没有办法使用mod_rewrite做到这一点?

不,但您可以使用RewriteMap,并通过外部程序处理您的variables:

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap

MapType:prg,MapSource:将Unix文件系统path转换为有效的常规文件

这里的源代码是一个程序,而不是一个地图文件。 要创build它,您可以使用您所select的语言,但是结果必须是可执行程序(无论是对象代码还是带有魔术cookie技巧的脚本(#!/ path / to / interpreter)作为第一行)。

这个程序启动一次,当Apache服务器启动,然后通过stdin和stdout文件句柄与重写引擎进行通信。 对于每个映射函数查找,它将在标准input接收到作为换行结束string查找的键。 然后,如果失败(即给定键没有对应的值),则必须将查找的值作为stdout上的换行符终止的string或四个字符的string“NULL”返回。 一个实现1:1映射(即键==值)的简单程序可能是:

 #!/usr/bin/perl $| = 1; while (<STDIN>) { # ...put here any transformations or lookups... print $_; } 

其中没有计算, http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

虽然它有分组(出现次数)和映射,我会build议你使用一个主要的index.php全局重写,并从那里创build页面,它应该显示请求数据(获取,发布,cookie等)这是什么大论坛和大多数CMS做的(例如,vbulletin,wordpress,ipb)…