Почему мои RewriteRules не будут хорошо играть вместе? - PullRequest
0 голосов
/ 10 ноября 2011

Первая часть моего кода работает и перенаправляет / переписывает на new/file.Проблема возникает, когда я пытаюсь передать переменные.Все они перенаправляются на new/file

Какую бы переменную я ни пытался передать, file.php?foo=bar перенаправляет на new/file вместо new/file/bar.

например:

  • new / файл перезаписывается в file.php
  • new / file / 2 переписывается в file.php? Page = 2
  • file.php перенаправляет на новый / file
  • file.php? Page = 2 не перенаправляет на новый / file / 2, а вместо этого переписывается на новый / file

Мой код:

RewriteBase /domain.com

#regular 
RewriteCond %{QUERY_STRING} !redirect=no
RewriteRule ^file\.php$ new/file? [NS,R=301,L]
RewriteRule ^new/file?$ file.php?redirect=no [NS]

#with variable
RewriteCond %{QUERY_STRING} ^page=([0-9-]+)/?$ 
RewriteRule ^file\.php$ new/file/%1?  [NS,R=301,L] 
RewriteRule ^new/file/([0-9-]+)/?$ file.php?page=$1&redirect=no [NS]

Обратите внимание, что я передаю больше, чем просто page переменных.

Я думаю, может быть флаг QSA должен бытьгде-нибудь?

1 Ответ

1 голос
/ 10 ноября 2011
RewriteCond %{QUERY_STRING} !redirect=no
RewriteRule ^file\.php$ new/file [NS,R=301,L]
RewriteRule ^new/file$ file.php?redirect=no [NS]

В строке 2 у вас было?Это заменит текущую строку запроса, и страница = 2. будет потеряна.

В строке 3 у вас есть?.Пути не содержат вопросительных знаков.Во-вторых, вопросительный знак интерпретируется как «необязательная буква« е »», потому что это RegEx.Так что "/ new / fil" тоже подойдет (попробуйте).

...