Regex: как остановить сопоставление URL, если он соответствует одному шаблону - PullRequest
1 голос
/ 02 апреля 2012

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

/aaa-bb/cc/dd-ee-ff/gg

должно соответствовать aaa-bb и dd-ee-ff. Мне нужно, чтобы он ничего не совпадал, если URL содержит /test/, поэтому для URL /aaa-bb/cc/test/dd-ee-ff/gg он не должен совпадать ни с чем. Я написал регулярное выражение

/\w+-(\w+(?!\.)-?)+

он обнаружит, что все строки содержат -, но я не могу добавить шаблон для части /test/.

Ответы [ 2 ]

1 голос
/ 04 апреля 2012

Сразу перед вашим RewriteRule, содержащим ваше регулярное выражение, добавьте условие перезаписи, чтобы исключить URL-адреса, содержащие подстроку /test/ в любом месте. Этот RewriteCond будет выглядеть так:

RewriteCond %{REQUEST_URI} !/test/
RewriteRule /\w+-(\w+(?!\.)-?)+ /some_place_else.html?parameters=$1
1 голос
/ 02 апреля 2012

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

if(!hasTest) {
  //check for dashes
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...