mod_rewrite странная проблема - PullRequest
1 голос
/ 27 января 2009

У меня странная проблема с mod_rewrite, соответствующие правила здесь:

RewriteRule ^(.*)\/igre\-(.*)\.php\?Page=([0-9]+)$ game.php?GameUrl=$2&Page=$3 [L]
RewriteRule ^(.*)\/igre\-(.*)\.php$ game.php?GameUrl=$2&Page=1 [L]

И соответствующий URL может выглядеть примерно так:

example.com/miselne-igre/igre-shirk.php?Page=2
example.com/miselne-igre/igre-shirk.php

Проблема в том, что первое правило не действует. Если я использую первый URL из примера, я всегда получаю 1 в переменную Page, которая показывает, что используется второе правило. Так что не так с первым? И почему второе правило даже соответствует URL с «.php? Page = XYZ» в конце, если я сказал, что URL заканчивается «.php»?

ps: другие правила в файле .htaccess работают нормально ...

Ответы [ 3 ]

2 голосов
/ 27 января 2009

Строка запроса не является частью пути URI, который обрабатывается директивой RewriteRule . Вы должны использовать директиву RewriteCond для обработки строки запроса.

RewriteCond %{QUERY_STRING} ^Page=[0-9]+$
RewriteRule ^[^/]+/igre-([^/]+)\.php$ game.php?GameUrl=$1&%0 [L]
RewriteRule ^[^/]+/igre-([^/]+)\.php$ game.php?GameUrl=$1&Page=1 [L]

Но вы все еще можете упростить это, используя флаг QSA ( строка запроса append ):

RewriteRule ^[^/]+/igre-([^/]+)\.php$ game.php?GameUrl=$1 [L,QSA]
0 голосов
/ 27 января 2009

Это только у меня или ваши аргументы задом наперед?

Вы имеете в виду:

RewriteRule ^(.*)\/(.*)\-igre\.php\?Page=([0-9]+)$ game.php?GameUrl=$2&Page=$3 [L]
RewriteRule ^(.*)\/(.*)\-igre\.php$ game.php?GameUrl=$2&Page=1 [L]

Вы хотели соответствовать miselne-igre, а не igre-miselne.

Очевидно, это не решает основную проблему, но я подумал, что я это добавлю

Дом

0 голосов
/ 27 января 2009

mod_rewrite не использует запрос в процессе перезаписи. Поэтому первый RewriteRule игнорируется. Вы можете объединить его с RewriteCond (пока не проверял), например:

RewriteCond %{QUERY_STRING} Page=([0-9]+)
RewriteRule ^(.*)\/igre\-(.*)\.php\?Page=([0-9]+)$ game.php?GameUrl=$2 [L, qsappend]
# qsappend appends the original query, in this case (Page=xx)

Ах, как сказал Гамбо; Вы также можете использовать %1 для обратной ссылки на номер страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...