Назад | Перейти на главную страницу

Почему этот шаблон не соответствует QUERY_STRING в RewriteCond, а он соответствует в preg_match?

Вот что у меня в .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. Итак, 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 в качестве единственного параметра в строке запроса, разделите строку запроса и перепишите на /runs/index.php:

RewriteCond %{QUERY_STRING} ^run=\w{13}$
RewriteRule ^/runs/?$ /runs/index.php? [L]