Проблема с .htaccess и RewriteRule - PullRequest
       0

Проблема с .htaccess и RewriteRule

0 голосов
/ 23 сентября 2010

У меня есть URL, как игры / xbox / 2
2, это номер страницы, который мне нужно переписать.Вот что я использую:

RewriteRule games/(.*?)/$ games/consoles.php?console=$1 
RewriteRule games/(.+?)/(.+?)/$ games/consoles.php?console=$1&page=$2

Первое правило работает нормально, но второе возвращает consoles.php как $ 1 вместо xbox

Ответы [ 2 ]

0 голосов
/ 23 сентября 2010

Попробуйте что-то вроде:

RewriteRule games/([^/]+)/([^/]+)/?$ games/consoles.php?console=$1&page=$2 [L]
RewriteRule games/([^/]+)/?$ games/consoles.php?console=$1 [L]

Сначала я ставлю ваше самое конкретное правило - таким образом, вы не выполняете общее сопоставление, а затем - более конкретное сопоставление, которое переписывает общее.

Я также указал флаг [L], чтобы указать, что вы хотите, чтобы двигатель прекратил поиск других совпадений на этом этапе. Переупорядочение правил в этом случае является излишним из-за флага [L], но это хорошая практика, чтобы войти в него.

Я также немного изменил выражения. Вместо того, чтобы использовать ([A-Za-z0-9]+), как сказал предыдущий автор, я изменил его на ([^/]+), потому что это будет соответствовать всему, кроме косой черты, так что вы можете иметь странные названия консоли или игры. Если вы хотите сделать его более конкретным, не стесняйтесь, но этот способ обеспечивает наиболее общий вариант использования.

0 голосов
/ 23 сентября 2010
RewriteRule games/([A-Za-z0-9]+)/?$ games/consoles.php?console=$1 
RewriteRule games/([A-Za-z0-9]+)/([0-9]+)/?$ games/consoles.php?console=$1&page=$2 

Использование (.*?) будет соответствовать даже символу /, поэтому xbox / 2 рассматривается как целое

...