Модуль заголовка Apache загружен, но не может установить заголовки в htaccess

У меня есть Apache 2.2.29 (unix), настроенный и работающий на моей новой машине разработчика (Mac). Я пытаюсь установить заголовки CORS для проекта API - то, что я делал много раз.

Файл htaccess для проекта выглядит так:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE" 
    Header set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type"
    ServerSignature Off
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /cms/public
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
    RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>

и модуль заголовков загружается в мой конф:

LoadModule headers_module libexec/mod_headers.so

Файл модуля находится в расположении, указанном в Apache Conf, и загружен ли он ОК:

dan$ httpd -M

Loaded Modules:
 core_module (static)
 mpm_event_module (static)
 http_module (static)
 so_module (static)
 authn_file_module (shared)
 authn_dbm_module (shared)
 authn_anon_module (shared)
 ...
 headers_module (shared)

Я также проверил настройки переопределения conf в моем основном conf и включенном conf vhosts:

<Directory "/Users/dan/Sites">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    <IfModule mod_authz_core.c>
        Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
    </IfModule>
</Directory>

Тем не менее, заголовки не устанавливаются, как ожидалось. Вот заголовки ответа при выполнении запроса к проекту API с использованием приведенного выше файла htaccess:

HTTP/1.1 200 OK
Date: Wed, 22 Jul 2015 10:36:05 GMT
Server: Apache/2.2.29 (Unix) DAV/2 mod_fastcgi/2.4.6 mod_ssl/2.2.29 OpenSSL/1.0.2c
Expires: Wed, 15 Jul 2015 10:36:05 GMT
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8

Я протестировал настройку приложения в других средах Apache, и она работает как положено... так что это определенно связано с моей настройкой. Это сводит меня с ума!

Какие-нибудь мысли? Дэн

2 ответа

Для всех, у кого все еще есть эта проблема: для меня это помогло изменитьallowOverride None в allowOverride All в файле httpd.conf

Если вы все еще заинтересованы в решении проблемы, у меня есть несколько предложений. Основная идея конфигурации в порядке, я протестировал ее на простой установке, и заголовки были установлены правильно.

Это означает, что проблема, вероятно, связана с файлом htaccess и возможностью серверов использовать его. Сначала я бы попытался поместить "мусор" в файл htaccess (что-либо, что не соответствует конфигурации Apache). Если файл htaccess читается правильно, все запросы, которые вызывают чтение файла, сгенерируют 500 Internal Server Error,

Следующий прогон apachectl -S и проверьте вывод, поставьте его в своем вопросе, если вы не уверены. Вы должны убедиться, что запрос отображается на <Directory> заблокировать в вашем вопросе. Боюсь, что вы мало что можете сделать, кроме поиска по файлам конфигурации. Пока вы делаете это, убедитесь, что AllowOverride где-то не переопределен.

Также вы используете mod_fastcgi, поэтому, в зависимости от вашей конфигурации, запрос может вообще не отображаться в каталог файловой системы, что требуется для чтения файла htaccess.

Другие вопросы по тегам