Другой элемент Regex в htaccess REQUEST_URI Объяснение? - PullRequest
1 голос
/ 25 марта 2020

Я новичок в regex, и я пытаюсь понять каждый компонент этого

RewriteCond  %{REQUEST_URI} !^/main/(web/.+|index.php|robots.txt)$

Я понимаю, что мы берем URL, и если он равен /main/, /main/web/index.php/ или /main/web/robot.txt мы выполним RewriteRule

Однако мне трудно понять, что означает % перед REQUEST_URI и каждым элементом регулярного выражения в .+|index.php|robots.txt.

1 Ответ

0 голосов
/ 25 марта 2020

Мне трудно понять, что % до REQUEST_URI

REQUEST_URI является серверной переменной Apache. %{...} «обертка» - это просто синтаксис, используемый для доступа к значению этой серверной переменной в этом контексте.

... и каждый элемент регулярного выражения в .+|index.php|robots.txt означает.

... и если оно равно /main/, /main/web/index.php/ или /main/web/robot.txt

На самом деле, оно не равно ни одному из них. Подшаблон (web/.+|index.php|robots.txt) является регулярным выражением чередование . Это конструкция "ИЛИ". Он соответствует одному из подшаблонов, разделенных символом канала (|).

Итак, следующее регулярное выражение:

^/main/(web/.+|index.php|robots.txt)$

Соответствует либо:

  • /main/web/<something> - <something> обозначается регулярным выражением .+ (1 или более символов, кроме символов новой строки).
  • /main/index.php - Хотя точка (.) в регулярном выражении соответствует любому персонажу. Таким образом, это также может соответствовать /main/index-php, /main/indexAphp et c. и др c. Точка должна иметь обратную косую черту sh в регулярном выражении, чтобы соответствовать буквальной точке. например. index\.php.
  • /main/robots.txt - тот же комментарий, что и выше в отношении неэкранированной точки в регулярном выражении.

Обратите внимание, что в этом случае всего CondPattern (2-й Аргумент к директиве RewriteCond) имеет префикс ! - это сводит на нет все выражение. Таким образом, директива успешна , когда регулярное выражение не соответствует. Другими словами, когда запрошенный URL-путь (REQUEST_URI) равен , а не , один из упомянутых выше URL.

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