Предисловие
Я очень новичок в отношении веб-серверов. Я настраиваю сервер Apache2 и в настоящее время изучаю документацию.
Я заметил , что <Directory>, <Location>и <Files>директивы имеют соответствующую <*Match>директиву: <DirectoryMatch>, <LocationMatch>и <FilesMatch>соответственно. Разница на поверхности достаточно очевидна:
<*Match>директивы принимают регулярное выражение в качестве аргумента- Директивы Non-Match принимают в качестве аргумента обычную строку или глобус в стиле оболочки.
Любопытно, что директивам, отличным от Match, также может быть задано регулярное выражение в качестве аргумента, если ему предшествует '~'. Таким образом, следующие две строки должны быть идентичны:
# From the Apache2 docs
<Directory ~ "^/www/[0-9]{3}"> ... </Directory>
<DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch>
Вопросов
Что я хотел бы знать, так это то, есть ли какие-то тонкие или ключевые отличия, о которых нужно знать, что документы Apachecore не упоминаются. В <DirectoryMatch>разделе упоминается одно тонкое отличие:
Совместимость
До 2.3.9 эта директива неявно применялась к подкаталогам (вроде
<Directory>) и не могла соответствовать символу конца строки ($). В 2.3.9 и позже только вложенные директивы влияют только на каталоги.
Помимо этого, я хотел бы знать:
- Есть ли другие различия между директивами Match и Non-Match?
- Какая директива более предпочтительна, когда требуется регулярное выражение?
- Любая другая информация, которую вы считаете уместной?
Ноты
<DirectoryMatch>и<Directory "~">находятся на одном уровне слияния- Хотя это и не указано явно,
<Directory "~">может использовать именованные группы и обратные ссылки, как<DirectoryMatch>.
<Directory ~и<DirectoryMatchнет<Directory. До Apache 2.3.9,<Directory ~возможно , был надмножеством, потому что он поддерживал$привязку регулярных выражений, тогда как<DirectoryMatchне поддерживал . (Возможно, поэтому рекомендация по использованиюDirectoryMatchбыла удалена в более ранних документах?)