Предисловие
Я очень новичок в отношении веб-серверов. Я настраиваю сервер 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
была удалена в более ранних документах?)