4

我有一个重写规则(在 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文档表明您可以在重写规则的替换部分中多次引用捕获。但是,在尝试了几天后,我无法使其工作。我确实让我的规则通过了在线正则表达式测试器,但不在我的网站上。最后我重新设计了我的菜单系统,以便我可以使用更简单的重写规则。

4

1 回答 1

1

您使用的这个正则表达式是错误的:

^(A-Za-z0-9-_)$

范围仅允许在方括号中,并且您需要使用+访问器来匹配超过 1 个字符。

将您的 RewriteRule 替换为:

RewriteRule ^([a-z0-9_-]+)/?$ $1.php?nav=$1 [L,NC,QSA]
于 2012-12-20T19:10:28.263 回答