Regex 正则表达式正在删除最后一个字符
在实现干净的URL时,我想映射Regex 正则表达式正在删除最后一个字符,regex,apache,mod-rewrite,clean-urls,Regex,Apache,Mod Rewrite,Clean Urls,在实现干净的URL时,我想映射http://www.pikspeak.com/iframe/3/bird?autoplay=true至http://www.pikspeak.com/iframe.php?id=3&img=bird&autoplay=true使用以下正则表达式 RewriteRule ^/iframe/([^/\.]+)/([^/\.?]+)\\?([^/\.]+) /iframe.php?id=$1&img=$2&$3 但问题是,imgget参数值的最后一个字
http://www.pikspeak.com/iframe/3/bird?autoplay=true
至http://www.pikspeak.com/iframe.php?id=3&img=bird&autoplay=true
使用以下正则表达式
RewriteRule ^/iframe/([^/\.]+)/([^/\.?]+)\\?([^/\.]+) /iframe.php?id=$1&img=$2&$3
但问题是,img
get参数值的最后一个字符(在此“bird”中)被删除,即“bir”。
你能帮我解决这个问题吗
除此之外,我也无法在php中获取“autoplay”参数
提前谢谢
\\?
实际上是指\?
\。
[QSA]
修饰符,而不是尝试匹配查询字符串重写规则^/iframe/([^/]+)/([^/]+)$/iframe.php?id=$1&img=$2[QSA]1。不,它是“\\?”,而不是2中解释的“\?”。好的,我将尝试删除\。但是我不确定它是否有效。我也将尝试[QSA]。不,是
\?
。这个问题是\\?
,因为正如您在注释中看到的,一个用于正则表达式,另一个用于字符串声明,这不适用于重写规则。到目前为止,您已经匹配了一个可选的反斜杠,这就是为什么bird
中的d
得到的回溯捕获为$3
,而不是您预期的查询字符串。更重要的是,查询字符串不是RewriteRule
的一部分。仅使用\?
有一些解析问题,并且它不会重写一行,因此我使用了\?
,这在一定程度上起到了作用。但是[QSA]
完成了这项工作。谢谢。\\?
只是给人一种工作的错觉,因为?
充当了“0或1”量词,并且默认为“0”。如果你把它全部拿出来,你会得到同样的结果。不管怎么说,很高兴它成功了。快乐编码!
RewriteRule ^/iframe/([^/.]+)/([^/.]+)$ /iframe.php?id=$1&img=$2 [QSA]