Я пытаюсь использовать webfont, который мне законно разрешено использовать, но не распространять. Я размещаю файлы шрифтов в отдельном домене, используемом для статического контента. Эти два домена не связаны друг с другом (один не является поддоменом другого). Допустим, что сайт, использующий webfont, example.com
, а сайт, на котором он размещен, находится example.net
.
Я пробовал это в файле .htaccess на example.net
<FilesMatch "\.(ttf|otf|eot|woff|svg)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "example.com"
</IfModule>
</FilesMatch>
Однако это позволяет шрифту работать только на домашней странице example.com
. Я снова попробовал:
Header set Access-Control-Allow-Origin "example.com/*"
Теперь шрифт работает на example.com
везде, кроме главной страницы, которая (конечно) не то, что я хотел.
Я не могу найти документацию для этого заголовка. Я действительно хочу разрешить все страницы на example.com
и www.example.com
(или, для хорошей меры, *.example.com
). Есть ли простой способ сделать это? Я предполагаю, что заголовок принимает какое-то регулярное выражение.
В поисках документации я нашел,
- много информации о том, как этот заголовок взаимодействует с ajax,
- много коротких заметок, в которых говорится, что это необходимо для веб-сайтов (по крайней мере, в Firefox).
Я не нашел никакой документации о синтаксисе самого заголовка или о том, как указать варианты домена.
На основе ответа на соответствующий вопрос, я пробовал это:
<FilesMatch "\.(ttf|otf|eot|woff|svg)$">
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www\.)?(example.com)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials true
</IfModule>
</FilesMatch>
Я понял, что для каждого запроса будет установлен отдельный заголовок, позволяющий каждой запрашивающей странице индивидуально использовать шрифт. Тем не менее, проверка с помощью Firebug выглядит так: заголовок всегда http://example.com
, как на домашней странице, так и в другом месте. Тем не менее, это работает, но оставляет меня в замешательстве. Связанный вопрос показывает, что аналогичная установка не работала для кого-то еще. Его вопрос предполагает, что для него он фактически отправлял другой заголовок для каждой запрашивающей страницы, и поэтому ответы HTTP 304 Not Modified
были нарушены. Его решение заключалось в том, чтобы добавить директиву always
в .htaccess
, но для меня это привело к ошибкам HTTP 500
.
Как и сейчас, его работа, и я думаю, будет продолжать работать, когда example.com
переключается на HTTPS (как будет скоро). Однако я не могу помочь, но чувствую, что это слишком сложно. Он каждый раз устанавливает один и тот же заголовок, но для этого используется сложное сопоставление шаблонов. Кроме того, пока у меня нет никаких проблем с ответами HTTP 304 Not Modified
(на самом деле, Ive еще не видел таких ответов: браузер просто не запрашивает файлы шрифтов вообще, пока я не очистил кеш), я волнуюсь, что я могу видеть их в будущее.