我可以在 RewriteRule 中进行简单的计算吗?

我可以在 RewriteRule 中进行简单的计算吗?

网站结构的变化意味着 URL 需要从

site/11-foo/21-bar 

site/1-foo/1-bar

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

这些简单的计算实际上可以节省数百万个需要处理的 301 重定向。有没有办法使用 mod_rewrite 来实现这一点?

答案1

不,但是您可以使用 RewriteMap 并让外部程序处理您的变量:

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

MapType:prg,MapSource:有效常规文件的 Unix 文件系统路径

这里的源是一个程序,而不是一个映射文件。要创建它,您可以使用您选择的语言,但结果必须是一个可执行程序(目标代码或以魔术技巧“#!/path/to/interpreter”作为第一行的脚本)。

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

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

答案2

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

虽然它确实具有分组(出现次数)和映射,但我建议您使用全局重定向到主 index.php,然后从那里创建应该通过请求数据(get、post、cookie 等)显示的页面,这是大型论坛和大多数 CMS 所做的(例如,vbulletin、wordpress、ipb)...

相关内容