.htaccess переписать - PullRequest
       5

.htaccess переписать

0 голосов
/ 01 октября 2010

Я не знаю, является ли это правильной областью, но здесь идет речь:

У меня есть RewriteRule

RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/1016/2063/test.html [L,NC]

это прекрасно работает, потому что я жестко закодировал идентификаторы. Теперь, когда я делаю что-то вроде

RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/$2/2063/test.html [L,NC]

Перезапись не работает, страница не найдена. Действительно странная часть в том, что $ 4 работает, так что если я сделаю что-то вроде

RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/1016/$4/test.html [L,NC]

это работает, но что-нибудь 3 и ниже не работает. Есть идеи? URL, который я использую, http://www.escience.ca/kids/RENDER/1016/2063/P2063.html

Как видите, $ 3 и $ 4 - это одинаковые идентификаторы, поэтому мой третий пример работает.

1 Ответ

0 голосов
/ 01 октября 2010

Посмотрите на ваши группы регулярных выражений:

RewriteRule ^(eScience/)?(\w+)/RENDER/(\d+)/(\d+)/P(\d+)\.html$ /RENDER/escience/kids/$2/2063/test.html [L,NC]
             $1          $2           $3    $4     $5

Должно быть понятно, почему это не работает - $ 2 - это не то число, которое вы ожидали.Возможно, вам следует использовать именованные группы для сложных регулярных выражений, если вы потеряете номерную цепочку.Вы можете исключить группы регулярных выражений из группы, используя оператор ?:, кстати (например, "(?: Ungrouped) (dollar1) (dollar2)").

...