Мне трудно понять, что %
до 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.