Как я могу избежать знака косой черты `/` в регулярном выражении директивы Apache `‹If›`?

Я хотел обслуживать файлы .xhtml как

  • application/xhtml+xml если браузер говорит, что принимает его.
  • text/html иначе

Я пытался сделать это с mod_rewrite, но не работал с Options -FollowSymLinks (см. Почему я получаю 403 Forbidden при просмотре файлов, затронутых Apache RewriteRule, если у меня есть `Options -FollowSymLinks`?).

Затем я попытался

<Files "*.xhtml">
    <If "%{HTTP:Accept} !~ /application\/xhtml\+xml/">
        ForceType text/html
    </If>
</Files>

Но я получаю синтаксическую ошибку: Не удалось скомпилировать регулярное выражение.

Между тем, я использую этот код...

<Files "*.xhtml">
    <If "%{HTTP:Accept} !~ /xhtml\+xml/">
        ForceType text/html
    </If>
</Files>

... который работает, но я хочу сопоставить правильный тип MIME.


person Oriol    schedule 28.02.2013    source источник


Ответы (2)


Вы можете использовать escape-код, например \x2F, вместо /.

person Qtax    schedule 28.02.2013

Похоже, что улучшение этого все еще находится в стадии разработки, начиная с Apache 2.4. Вместо этого член команды Apache "covener" рекомендует m#regexp#.

Таким образом, ваш код будет выглядеть так...

<If "%{HTTP:Accept} !~ m#application/xhtml\+xml#">
person lkraav    schedule 31.05.2015
comment
Я не вижу этот comment_3455 Ковенера. Но в разделе Другое указано, что m#regexp# является альтернативой /regexp/. - person Oriol; 31.05.2015
comment
Странно, но якорь стреляет в меня прямо к правильному ответу обсуждения. Но также отличная находка в таблице официальной документации Other. - person lkraav; 31.05.2015
comment
m#regexp# хорошо работает для меня при оценке по сравнению с REQUEST_URI, который в типичном сценарии будет иметь косую черту. - person RjOllos; 07.06.2015