У меня установлен 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 и включенном vhosts conf:
<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, и он работает, как ожидалось ... так что это определенно связано с моей настройкой. Это сводит меня с ума!
Есть предположения? Дэн
Для всех, у кого еще есть эта проблема: мне помогли поменять allowOverride None
к allowOverride All
в файле httpd.conf
Если вы все еще заинтересованы в решении проблемы, у меня есть несколько предложений. Основная идея конфигурации прекрасна, я протестировал ее на простой настройке, и заголовки были установлены правильно.
Это означает, что проблема, вероятно, связана с файлом htaccess и возможностью серверов использовать его. Сначала я бы попробовал поместить "мусор" в файл htaccess (все, что не является допустимой конфигурацией Apache). Если файл htaccess читается правильно, все запросы, которые вызывают чтение файла, будут генерировать 500 Internal Server Error
.
Следующий запуск apachectl -S
и проверьте результат, укажите его в своем вопросе, если вы не уверены. Вы должны убедиться, что запрос соответствует <Directory>
заблокировать в своем вопросе. Боюсь, что вы мало что можете сделать, кроме поиска в файлах конфигурации. При этом убедитесь, что AllowOverride где-то не переопределен.
Также вы используете mod_fastcgi, поэтому в зависимости от вашей конфигурации запрос может вообще не соответствовать каталогу в файловой системе, что требуется для чтения файла htaccess.