RegEx для проверки URL в rewriteMap - PullRequest
       13

RegEx для проверки URL в rewriteMap

0 голосов
/ 05 февраля 2019

Я пишу инструмент для офиса, позволяющий людям отправлять сопоставления для использования в rewriteMap в файле web.config, и я пытаюсь проверить оба пути на соответствие правилам с помощью RegEx, но яКажется, я не могу охватить все основы, поэтому я ищу некоторую помощь в том, чтобы сделать 2 выражения максимально пуленепробиваемыми.

Общие требования к обоим выражениям

  • Должно быть чувствительно к регистру, так как они будут использоваться (среди других мест) в атрибуте input HTML *1007*.
  • Должно быть таким же базовым, как возможно (ключевое слово,там) поскольку люди, которые могут их редактировать в будущем, будут иметь разную степень знаний RegEx - например, использование [a-zA-Z0-9_] вместо \w.
  • Соответствие не должно включать протокол (httpили https) или домен (www.domain.tld или domain.tld). *

Выражение для key (пути для перенаправления из)

Что у меня сейчас есть:

^[a-zA-Z0-9\-_].+?[a-zA-Z0-9\-_]$

Требования

  • Не может начинаться или заканчиваться /.
  • Может быть каталогом или файлом.
  • Может содержать пробелы.
  • Может или не может бытьнесколько уровней глубоко в структуре каталогов.
  • Невозможно начать с определенных (внутренне) зарезервированных имен каталогов - в настоящее время этот список включает только administration, но будет добавлена ​​еще пара. **

В следующем (неисчерпывающем списке) приведено несколько примеров значений, которые мне нужно отклонить:

VALUE                      | SHOULD BE
---------------------------|--------------
/old                       | old
/old/dir_name/             | old/dir_name
https://www.domain.tld/old | old
domain.tld/file name.ext   | file name.ext
administration             | (reject completely)
administration/dir-name    | (reject completely)

Выражение для value (пути для перенаправления в)

То, что у меня сейчас есть:

^/(.+?/(.+?[a-zA-Z0-9])?)?$
  • Должен начинаться с /.
  • Может быть каталогом или файлом (номы будем в первую очередь перенаправлять в каталоги.)
  • Если каталог должен заканчиваться /.
  • Имена файлов всегда будут иметь расширение.
  • Имена каталоговникогда не будет содержать ..
  • Может содержать пробелы.
  • Может содержать несколько уровней в каталоге.cture или может быть корневым каталогом.

В следующем (неисчерпывающем списке) приведено несколько примеров значений, которые мне нужно отклонить:

VALUE                       | SHOULD BE
----------------------------|----------------
/new                        | /new/
new/dir_name                | /new/dir_name/
https://www.domain.tld/new/ | /new/
domain.tld/file name.ext    | /file name.ext
/new/dir.name/file_name.ext | (reject completely)

Соответствующийrule из файла web.config (где Redirects - это name из rewriteMap), если это уместно:

<rule name="rewriteMap">
    <match url="^(.+?)/?$" />
    <conditions>
        <add input="{Redirects:{R:1}}" pattern="(.+)" />
    </conditions>
    <action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>

* I 'в настоящее время я работаю над этой частью RegEx;мне показалось, что лучше не включать его в мои примеры, поскольку он очень неполный.
** Это требование было добавлено только после того, как я начал писать этот вопрос, поэтому оно не рассматривается в примере RegEx.

...