Можно ли использовать именованные обратные ссылки в Apache mod_rewrite - PullRequest
1 голос
/ 27 октября 2010

All

В одной из моих RewriteRules я наткнулся на интересную небольшую причуду, которую я хотел решить, используя именованные обратные ссылки. Однако из того, что я вижу, это не возможно в mod_rewrite Apache.

У меня есть два входящих URL-адреса, каждый из которых содержит переменную ключа, которую необходимо переписать в одно и то же базовое действие платформы.

Входящие URL:

/users/list/page-2
/users/list/2

Желаемая конечная точка перезаписи

/? = Модуль пользователей и действие = список & pagenum = 2

Мне бы хотелось сделать что-то подобное

RewriteRule ^ / (? P ([\ w] +)) / (? P ([\ w] +)) / (страница -)? (? P ([\ d] +)) $ /? module = $ {module} & action = $ {action} & pagenum = $ {pagenum} [L, QSA]

Однако Apache просто не хочет так играть и дает мне нулевые значения в местах именованных обратных ссылок. Чтобы обойти эту проблему, я использовал числовые ссылки на захваченные группы ($ 1, $ 2, $ 4) (но я почти на полпути к пределу N = 9 apache). Так что это не остановка для меня.

Я просто хотел бы знать, если именованные обратные ссылки доступны в mod_rewrite в Apache, и если они есть, почему шаблон моего RewriteRule не совпадает?

Спасибо, Ian

Ответы [ 3 ]

1 голос
/ 27 октября 2010

Это может быть полезно:

https://httpd.apache.org/docs/trunk/rewrite/rewritemap.html

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

Никаких обратных ссылок, похоже, после просмотра источника mod_rewrite.

Я бы все равно рекомендовал использовать опцию RewriteMap вместо длинного списка RewriteRules, поскольку это будет намного быстрее, чем перебирать длинный список.

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

Если последний ответ @ superspace не работает, я бы посоветовал направить все ссылки, которые не направлены на файлы / каталоги, и направить их на страницу индекса.Затем настройте класс маршрутизации, который принимает имя страницы и выполняет сопоставление вручную, так что вы можете иметь свой именованный массив регулярных выражений capture и перечислять шаблоны или страницы, которые вы хотите передать.

Если вам нужно пойти по этому пути,дайте мне знать, и я могу предложить код из моих классов.

...