我有一个重写规则(在apache htaccess文件中),该规则正在尝试使用仅次于一个捕获($ 1)的两次返回引用:
RewriteRule ^([A-Za-z0-9_-]+)/?$ $1.php?nav=$1
看来查询字符串被留下了emtpy,例如
example.com/new
被重写为
example.com/new.php?nav=
我想要的是
example.com/new.php?nav=new
我的问题:我可以在表达式中两次引用$ 1吗?
更新:
mod_rewrite上的apache文档表示您可以在重写规则的替换部分中尽可能多地引用捕获。但是,在尝试了几天后,我无法使它起作用。我确实得到了我的规则,可以传递在那里的在线正则测试仪,但没有在我的网站上。最后,我重新设计了菜单系统,以便可以使用更简单的重写规则。
您使用的这是错误的:
^(A-Za-z0-9-_)$
仅在方括号中允许范围,您需要使用+
访问者匹配1个字符。
用以下方式替换您的重写:
RewriteRule ^([a-z0-9_-]+)/?$ $1.php?nav=$1 [L,NC,QSA]