Регулярное выражение Perl/lighttpd

Я использую регулярное выражение в lighttpd для перезаписи URL-адресов, но я не могу написать выражение, которое делает то, что я хочу (что, как мне казалось, было довольно простым, по-видимому, нет, я, вероятно, что-то упускаю).

Скажем, у меня есть этот URL: /page/variable_to_pass/ ИЛИ /page/variable_to_pass/

Я хочу переписать URL-адрес следующим образом: /page.php?var=variable_to_pass

У меня уже есть такие правила, как ^/login/(.*?)$, для обработки определенных страниц, но я хотел создать такое, которое могло бы соответствовать любой странице, не нуждаясь в одном выражении на странице.

Я пробовал это: ^/([^.?]*), но он соответствует всему /page/variable_to_pass/, а не только page.

Любая помощь приветствуется, спасибо!


person Blake    schedule 24.03.2012    source источник


Ответы (2)


Это регулярное выражение должно делать то, что вам нужно

/([^\/]+)/(.+)

Первым совпадением будет имя страницы, а вторым - значение переменной

person mcsi    schedule 24.03.2012
comment
Спасибо, это соответствует обоим, даже с трейлингом / в конце. Можно ли после этого сопоставлять переменные? Если у меня есть /page/var1/var2/, как мне сопоставить все 3 из них? - person Blake; 24.03.2012
comment
Я думаю, вы можете изменить его на /([^\/]+)(?:/([^\/]+))*, чтобы он соответствовал всем переменным. - person mcsi; 24.03.2012

Пытаться:

/([^.?])+/([^.?])+/

Это должно дать вам две спички.

person Ed Chapel    schedule 24.03.2012