Команда заголовка .htaccess выдает ошибку 500 при использовании экранированных URL-адресов.

У меня есть много веб-страниц, которые существуют отдельно в виде файлов PDF. Меня попросили сообщить Google через .htaccess, каков исходный URL-адрес HTML-версии PDF-файлов.

Все веб-страницы доступны через закодированный URL с помощью функции PHP urlencode(). URL-адреса содержат названия компаний.


Рабочий пример, название компании Очень хорошая компания:

<Files company123.pdf>
    Header append Link '<https://www.example.com/company/123/Very+good+company>; rel="canonical"'
</Files>

Как только название компании содержит символ, который необходимо закодировать (например, немецкие умляуты), веб-сервер выдает ошибку 500 для всего каталога:

Нерабочий пример, название компании.

<Files company456.pdf>
    Header append Link '<https://www.example.com/company/456/Very+b%C3%A4d+c%C3%B6mp%C3%A4ny>; rel="canonical"'
</Files>

Что мне нужно изменить, чтобы решить эту проблему? Это неправильно, что файл содержит закодированные URL-адреса? Нужно ли вместо этого определять незакодированные URL-адреса, такие как https://www.example.com/company/123/Very good company и https://www.example.com/company/123/Very bäd cömpäny?


person Jan    schedule 29.06.2020    source источник


Ответы (1)


https://httpd.apache.org/docs/2.4/mod/mod_headers.html#header

value может быть строкой символов, строкой, содержащей специфичные для mod_headers спецификаторы формата (и символьные литералы), или выражением ap_expr с префиксом expr=

Символ процента является частью синтаксиса этого спецификатора формата, поэтому его нужно экранировать:

The following format specifiers are supported in value:  
Format   Description  
%%       The percent sign  
…        …

Вам нужно будет удвоить все символы % здесь.

person CBroe    schedule 29.06.2020
comment
Большое спасибо! Я впервые работаю с заголовочным модулем Apache, даже пришлось сначала установить модуль. Никогда не слышал об этих спецификаторах формата, так что еще раз спасибо! - person Jan; 29.06.2020