在RewriteRule Regex方面需要帮助

时间:2010-10-13 16:31:13

标签: regex apache mod-rewrite

我有这个网址:http://localhost/zina/Artist%20One%20Demo?l=8&m=10&c 它需要成为:http://localhost/?p=Artist%20One%20Demol=8&m=10&c&option=com_zina&Itemid=82

我用它来重写网址:

RewriteRule ^zina/(.*)?(.*)$ /?p=$1&$2&option=com_zina&Itemid=82 [L,R]

但是,我最终会看到这样的网址:http://localhost/?p=Artist%20One%20Demo/Title%20One&&option=com_zina&Itemid=82

换句话说,$ 2与任何东西都没有匹配。谁能告诉我为什么?

2 个答案:

答案 0 :(得分:1)

?是一个特殊字符(选择前一个模式的0或1),.*是贪婪的(尽可能匹配,所以直到结束,所以$ 2将总是为空,因为$ 1会吃掉所有东西,直到行尾。

查询字符串不在RewriteRule匹配的字符串中,查询字符串中的模式通常在重写规则之前用RewriteCond %{QUERY_STRING} pattern完成。

但是,我们不需要使用正则表达式来获取URL中的查询字符串:

RewriteRule ^zina/(.*)$ /?p=$1&option=com_zina&Itemid=82 [L,R,QSA]

答案 1 :(得分:0)

这是关闭袖口而未经测试,但看起来你没有逃脱?在重写正则表达式中,它将按字面意思对待它。

试试这个

RewriteRule ^zina/(.*)\?(.*)$ /?p=$1&$2&option=com_zina&Itemid=82 [L,R]