这是我的.htaccess文件。
RewriteEngine on RewriteCond %{QUERY_STRING} ^(run=[a-z0-9A-z]{13})$ RewriteRule %{QUERY_STRING} \? [L]
我所做的就是为所有QUERY_STRING重写QUERY_STRING ,类似于run=4f13665700694 ,什么也不做。 URL示例: http://thinkingmonkey.me/runs/?run=4f13665700694 : http://thinkingmonkey.me/runs/?run=4f13665700694 。 所以,RewriteCond应该匹配。 但是,上述不起作用。
但是,模式似乎是正确的。 因为, preg_match和RewriteRule使用PCRE - Perl Compatible Regular Expressions 。
我尝试使用preg_match 。
$subject = "run=4f13665700694"; $pattern = "/^(run=[a-z0-9A-z]{13})$/"; echo preg_match($pattern, $subject);
除了上面的例子,还会输出:
1
即成功匹配。
我不懂为什么。 我在这里错过了什么?
那么,这将会请求/runs/使用13个字符的字母数字run参数作为唯一的查询string,剥离查询string,并重写为/runs/index.php :
RewriteCond %{QUERY_STRING} ^run=\w{13}$ RewriteRule ^/runs/?$ /runs/index.php? [L]