Что делает это регулярное выражение / перезапись? - PullRequest
0 голосов
/ 13 февраля 2012

В следующем коде, что делает регулярное выражение?

RewriteCond   %{REQUEST_URI}       ^/(?:[A-Za-z]+(?:/[A-Za-z]*)*)(?:/\d+)?$
RewriteRule   .*                   var/www/%1/index.php [L]

Каков результат правила перезаписи?

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

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Предполагается перенаправить все запросы вида /letters{/letters}[/digits] в локальный файл var/www/SOMETHING/index.php, но это не так: во-первых, нет группы захвата (все группы имеют ведущий ?: и, следовательно, это не такпонятно что будет SOMETHING).Далее, часть var/www..., возможно, должна иметь ведущую /.

2 голосов
/ 13 февраля 2012

Каков результат правила перезаписи?

AFAIK будет генерировать 404 секунды, когда вы этого не ожидаете.Почему?

  1. Скобки (?: Что-то) в основном такие же, как (), за исключением того, что они не устанавливают переменную соответствия.Поскольку все брекетинг подобен этому, %1 никогда не будет определен.

  2. Подбирая описание Александра /letters{/letters}([/digits]), где /digits являются необязательными.Группа повтора - «ноль или более букв» и, следовательно, будет использовать любые символы /, и это жадные совпадения, поэтому /aa/bb/cc/123 будет проанализирован как (/aa) (/bb)(/cc) (/) (123).Это не удастся, поскольку 123 не соответствует (?:/\d+)?

  3. Таким образом, оно будет соответствовать только строкам альфа-пути, например / aaa / bbb / ccc и% 1 будет«» и в этих обстоятельствах это будет перенаправлено на var/www//index.php относительно текущего пути, который, вероятно, будет DOCROOT, поэтому, если DOCROOT/var/www/index.php не существует, это приведет к 404.

0 голосов
/ 13 февраля 2012

Следуя справке mod-rewrite , %1 должен ссылаться на первую группу захвата регулярного выражения из последнего RewriteCond. Но регулярное выражение имеет только группы без захвата ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...