在urlrewrite中$1后面的数字是什么?

3

我需要在urlrewrite规则中将一些数字放入结果URL中,因此从像"/test/723/"这样的URL中,我会得到"/test/700-series/723/"。显然这是

RewriteRule ^/test/([1-9])([0-9]{2})/$  /test/$100-series/$1$2/ 

由于$100无法正确解释,所以不起作用。是否有办法将$1与其后面的任何数字分开?

1个回答

2

你很接近了,只需要去掉前面的斜杠:

RewriteRule ^test/([1-9])([0-9]{2})/?$  /test/$100-series/$1$2/ [L]
  • .htaccess 是每个目录的指令,并且 Apache 从 RewriteRule URI 模式中剥离当前目录路径(因此前导斜杠)。

根据官方 Apache 文档,它清楚地说明:

RewriteRule 反向引用: 这些反向引用的格式为 $N (0 <= N <= 9)。$1 到 $9 提供访问模式中分组部分(括号中的内容)的能力,从 RewriteRule 开始到当前一组 RewriteCond 条件。$0 提供对该模式匹配的整个字符串的访问。

因此,$100 总是被解释为 $1 和 2 个字面零。


问题是如何使 Rewrite_Mod 仅评估 $1,而不是 $100。 - Amine Hajyoussef
如果您测试我的发布的答案,您会注意到它会根据OP的需要将“/test/723/”重写为“/test/700-series/723/”。 - anubhava
如果您有兴趣阅读文档:http://httpd.apache.org/docs/current/mod/mod_rewrite.html,它清楚地说明了**`RewriteRule反向引用:这些是形式为$N(0 <= N <= 9)的反向引用。 $1到$9提供对模式中分组部分(括号内)的访问,从而使RewriteRule受当前一组RewriteCond条件的影响。 $0提供对由该模式匹配的整个字符串的访问。** 因此,$100始终被解释为$1`和2个字面零。 - anubhava
尝试访问http://htaccess.madewithlove.be/,我认为$10不仅被解释为$1,这很奇怪! - Amine Hajyoussef
1
你是对的,请在你的回答中引用文档以澄清问题。(你必须编辑你的回答,这样我才能取消我的投票) - Amine Hajyoussef
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接