htaccess重写规则不匹配

时间:2013-07-13 19:35:56

标签: .htaccess rewrite match

我想在htaccess上匹配varriables ...这是我的htaccess文件:

RewriteEngine On
RewriteRule ^(.*)/(.*)/(.*)/([^/]*).mp4$ str.php?vid=$1&auth=$2&hash=$3
RewriteCond ^(.*)/(.*)/(.*)/([^/]*).mp4?start=(.*)$ str.php?vid=$1&auth=$2&hash=$3&start=$4
RewriteRule ^(.*)/(.*)/(.*)/([^/]*).flv$ str.php?vid=$1&auth=$2&hash=$3
RewriteCond ^(.*)/(.*)/(.*)/([^/]*).flv?start=(.*)$ str.php?vid=$1&auth=$2&hash=$3&start=$4

一切正常,但start变量存在问题。 htaccess与start变量不匹配。任何人都可以帮助我

2 个答案:

答案 0 :(得分:0)

不确定为什么在规则之后你有重写条件,因为你拥有的东西永远不会匹配。此外,您需要匹配%{QUERY_STRING}变量:

RewriteCond %{QUERY_STRING} ^(?:start=([^&]+)|)
RewriteRule ^(.*)/(.*)/(.*)/([^/]*).mp4$ str.php?vid=$1&auth=$2&hash=$3&start=%1

RewriteCond %{QUERY_STRING} ^(?:start=([^&]+)|)
RewriteRule ^(.*)/(.*)/(.*)/([^/]*).flv$ str.php?vid=$1&auth=$2&hash=$3&start=%1

请注意,您在正则表达式中有四个捕获组,三个(.*)然后一个([^/]*),并且您只使用前三个,而忽略第四个。但如果你说那个工作正常,那么我想这就是你想要的。

答案 1 :(得分:0)

您使用的$4变量应为$5,因为您在网址中搜索的5匹配start=(.*)是第5个。

但是,请尝试使用这两行而不是4行。使用QSA标志,如果查询字符串包含在URL中,它会将查询字符串附加到结尾。

RewriteRule ^(.*)/(.*)/(.*)/([^/]*).mp4$ str.php?vid=$1&auth=$2&hash=$3 [QSA,L]
RewriteRule ^(.*)/(.*)/(.*)/([^/]*).flv$ str.php?vid=$1&auth=$2&hash=$3 [QSA,L]