На основе PCRE Regex для перенаправления - PullRequest
0 голосов
/ 16 января 2019

У меня есть несколько ссылок.

http://www.example.com/excel.aspx
http://www.example.com:80/word.aspx
http://www.example.com:80/powerpoint.aspx
http://www.example.com:80/pdf.aspx
http://www.example.com:80/barcode.aspx
http://www.example.com/ocr.aspx
http://www.example.com/email.aspx
http://www.example.com/project.aspx

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

https://www.example.com/excel
https://www.example.com/word
https://www.example.com/powerpoint
https://www.example.com/pdf
https://www.example.com/barcode
https://www.example.com/ocr
https://www.example.com/outlook
https://www.example.com/project

Если вы проверите и сравните, я заменил адрес электронной почты на внешний вид в URL замещения.

Я могу сопоставить шаблоны следующим образом . * / (\ W +). Aspx и заменить на https://www.example.com/$1, но не могу найти способ заменить email с прогноз . Демоверсия https://regex101.com/r/71huIx/24

Что-то похожее на http://www.rexegg.com/regex-trick-conditional-replacement.html, но без пула или словаря. Однако, если пул или словарь могут быть частью самого регулярного выражения, тогда все будет в порядке. Причина в том, что у меня есть текстовый файл с правилами, где line1 - это регулярное выражение, а line2 - это подстановка.

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 16 января 2019

Вот конфиг Apache httpd, который должен работать:

RewriteEngine On
RewriteRule   ^/outlook$        https://example.com/email.aspx  [P,L]
RewriteRule   ^/([^./])/?$      https://example.com/$1.aspx     [P,L]

При этом используется обратный прокси-сервер для обслуживания таких страниц, как email.aspx и foobar.aspx, когда им предоставляются "outlook" и "foobar", не раскрывая их расширения пользователям.

Хотя, похоже, вы пытаетесь вернуться назад по какой-то причине. В этом случае вы бы хотели:

RewriteEngine On
RewriteRule   ^/email\.aspx$    https://example.com/outlook     [L]
RewriteRule   ^/([^.]+)\.aspx$  https://example.com/$1          [L]

Regex условные выражения не может выполнить вашу задачу. Структура регулярного выражения:

(?(condition)yes-pattern|no-pattern)
  • condition либо
    • утверждение нулевой ширины (обычно заблаговременно)
    • целое в скобках, обозначающее, имеет ли этот пронумерованный захват содержимое
    • имя группы захвата в угловых скобках или одинарных кавычках
    • (R), что верно при оценке внутри рекурсии или eval
  • yes-pattern - регулярное выражение для соответствия, если условие истинно
  • no-pattern - необязательное регулярное выражение для сопоставления, если условие ложно

Следовательно, вы не можете вставить новый текст в совпадение с помощью условного выражения.

...