Использовать sub_filter на разных URL-адресах, обслуживающих одну и ту же html-страницу

Я пытаюсь обойти тот факт, что SPA (то есть страницы, обработанные javascript) не могут обслуживать метаданные Twitter, и эти метаданные должны быть частью HTML-страницы сервера. Есть много подходящих решений этой проблемы, таких как рендеринг на стороне сервера, но я ищу более быстрый способ, поскольку я хочу, чтобы это было для страницы, обслуживаемой всего тремя разными URL-адресами.

Я хочу достичь:

  • http: //example.com => обычно обслуживает index.html (в index.html жестко запрограммированы мета-теги заголовка)

  • http://example.com/accept обслуживает index.html, но с замененными метатегами за счет использования sub_filter, в котором есть слово accept

  • http://example.com/reject , обслуживает index.html, но с заменой метатегов за счет использования sub_filter со словом reject

I пробовал использовать разные места, например:

location / {
  try_files $uri /index.html;
}

location /accept {
  sub_filter 'normal'  'accept';
  sub_filter_once off;
  try_files $uri /index.html;
}

Но я получил index.html с обычными метатегами. Если я перемещаю sub_filter в место /, то замена строки работает.

Также экспериментировал с перезаписью, если внутри помещения и т. д., но не смог заставить его работать.

1
задан 8 October 2017 в 12:41
2 ответа

Последний элемент оператора try_files ищет другое местоположение для обработки запроса на /index.html , который поэтому он не обрабатывается в том же блоке location .

Вы можете использовать alias директиву или rewrite ... break to продолжать обработку в том же блоке местоположения.

location /accept {
    default_type text/html;
    alias /path/to/index.html;

    sub_filter 'normal'  'accept';
    sub_filter_once off;
}

Или:

location /accept {
    rewrite ^ /index.html break;

    sub_filter 'normal'  'accept';
    sub_filter_once off;
}
1
ответ дан 3 December 2019 в 23:25

Ричард Смит был прав, это последний элемент try_files (откат), который вызывает проблему, поскольку откат обрабатывается в другом контексте. Так что самый простой ответ - сделать индекс .html больше не последний элемент.

location /accept {
  sub_filter 'normal'  'accept';
  sub_filter_once off;
  try_files $uri /index.html /index.html; # notice this with 2 index.html
}
0
ответ дан 3 December 2019 в 23:25

Теги

Похожие вопросы