X

Отправка заголовков ответа сервера через htaccess в Apache

В некоторых ситуациях требуется отправить дополнительные заголовки ответа сервера. Например, в php это можно сделать так..

<?php
header('Access-Control-Allow-Origin: https://it-rem.ru');

Но, как быть, если это не какой-то скрипт, а статический файл? Конечно можно написать правило mod_rewrite и завернуть все на скрипт, например так

RewriteEngine On
RewriteRule ^lang.properties$ add-header.php?file=$0 [L]

а затем в файле, add-header.php

<?php
if (isset($_GET['file']) && file_exists($_GET['file'])) {
    header('Access-Control-Allow-Origin: https://it-rem.ru');
    readfile($_GET['file']);
}

Но есть и другое решение, которое мне нравится больше, это модуль для apache, который называется mod_headers

Устанавливается он так

# Активируем модуль
sudo a2enmod headers

# Перезапускаем Apache
sudo systemctl restart apache2

Теперь можно в папке с файлом создать .htaccess с такой записью:

<IfModule mod_headers.c>
    <Files "lang.properties">
        Header add Access-Control-Allow-Origin "https://it-rem.ru"
    </Files>
</IfModule>

ну или тоже самое, но по маске файла описанной в регулярном выражении

<IfModule mod_headers.c>
    <Files ~ "\.properties$">
        Header add Access-Control-Allow-Origin "https://it-rem.ru"
    </Files>
</IfModule>

или так

<IfModule mod_headers.c>
    <FilesMatch "\.properties$">
        Header add Access-Control-Allow-Origin "https://it-rem.ru"
    </FilesMatch>
</IfModule>

Про разницу между Files и FilesMatch можно прочитать в официальной документации тут: Files, FilesMatch

В результате, например, в Developers Tools (Инструментах разработчика), в браузере, мы может увидеть дополнительный заголовок

Дополнительный заголовок Access-Control-Allow-Origin

Как видите использовать mod_headers намного проще и удобнее, чем писать mod_rewrite и перенаправлять на скрипт.

Категории: Apache Сервера