我有这个网址: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与任何东西都没有匹配。谁能告诉我为什么?
答案 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]