Измените рабочий AddHandler так, чтобы он совпадал с файлами только в каталоге CURRENT, а не в дочерних каталогах. - PullRequest
2 голосов
/ 08 апреля 2020

Следующее прекрасно работает для разрешения PHP быть выполненным на двух XML файлах:

<FilesMatch ^(opensearch|sitemap)\.xml$>
AddHandler application/x-httpd-php5 .xml
</FilesMatch>

Однако к сожалению, это правило позволит этому произойти в любом дочернем каталоге а также.

  • / opensearch. xml, рабочий / желаемое совпадение
  • / henchman24 / opensearch. xml, рабочий / НЕ желаемое совпадение

Как заставить Apache на только сопоставлять файлы в текущем каталоге и не дочерние каталоги?

Я бы очень нравится:

  • Избегать добавления дочернего файла .htaccess в каждый возможный дочерний каталог.
  • Избегать использования абсолютного пути к серверу.

Ответы [ 2 ]

1 голос
/ 10 апреля 2020
Директива

If может использоваться для предоставления условия для обработчика, который будет добавлен только для файлов, соответствующих шаблону в текущей папке.

В следующем примере будет добавлен обработчик только для файлов в документе root, таких как /sitemap.xml и /opensearch.xml, но не для /folder/sitemap.xml и /folder/opensearch.xml

<FilesMatch ^(opensearch|sitemap)\.xml$>
<If "%{REQUEST_URI} =~ m#^\/(opensearch|sitemap)\.xml$#">
  AddHandler application/x-httpd-php .xml
</If>
</FilesMatch>

В приведенном выше примере условие проверяет, что REQUEST_URI соответствует шаблону регулярных выражений , ограниченному m# #. Оператор сравнения ~= проверяет соответствие строки регулярному выражению.

Шаблон ^\/(opensearch|sitemap)\.xml$ соответствует REQUEST_URI переменная (компонент пути запрошенного URI), например /opensearch.xml или /sitemap.xml

^                      # startwith
\/                     # escaped forward-slash
(opensearch|sitemap)   # "opensearch" or "sitemap"
\.                     # .
xml                    # xml
$                      # endwith
0 голосов
/ 12 апреля 2020

Вы пробовали H = в RewriteRule?

RewriteEngine On
RewriteRule ^(opensearch|sitemap)\.xml$ . [H=application/x-httpd-php5]

У перезаписи в htaccess есть встроенное свойство, согласно которому имена этих файлов в любом подкаталоге будут иметь поддиректорий в строке, с которой тестирует регулярное выражение, поэтому привязанное регулярное выражение не будет совпадать в подкаталогах.

...