【发布时间】:2012-12-23 03:11:20
【问题描述】:
我有一个重写规则(在 Apache htaccess 文件中),它试图从一次捕获 ($1) 中使用两次反向引用:
RewriteRule ^([A-Za-z0-9_-]+)/?$ $1.php?nav=$1
查询字符串似乎是空的,比如
example.com/new
被改写为
example.com/new.php?nav=
我想要的是
example.com/new.php?nav=new
我的问题:我可以在表达式中引用两次 $1 吗?
更新:
mod_rewrite 上的 Apache documentation 表明您可以在重写规则的替换部分中多次引用捕获。但是,在尝试了几天后,我无法使其工作。我确实让我的规则通过了在线正则表达式测试器,但不在我的网站上。最后我重新设计了我的菜单系统,以便我可以使用更简单的重写规则。
【问题讨论】:
-
这很有趣。我不明白为什么你不会能够,因为在正则表达式的所有其他实现中,这是可能的。我很好奇,如果您使用 ^((A-Za-z0-9-_))$ 代替,然后使用
$1和$2,会发生什么?如果这行得通,那将更强烈地将问题与您的建议隔离开来。 -
谢谢。尝试了 2 美元,但问题仍然存在。
-
其实这是一个有用的提示!这不起作用的事实暗示这 没有 与两次使用反向引用有很大关系。其他事情正在发生。
-
我的所有其他规则都可以正常工作。这是我试图“重用”反向引用的唯一一个,这似乎完全合乎逻辑。这是我唯一能看到的与其他规则不同的地方。
-
这可能是唯一一个重复使用反向引用的,但这可能只是一个巧合。您说的另一个示例不起作用,表明它不是 only 重复反向引用的情况失败:使用 separate 反向引用也失败了。尝试
$1$1.php?nav=$1替换字符串,看看我的意思。我相信在那个例子中,您将看到重复的反向引用工作,只是不在查询字符串中,而且我进一步相信您的 query 字符串存在问题,而不是与反向引用有关。
标签: regex apache mod-rewrite