在.htaccess中为Https协议设置Access-Control-Allow-Origin

我有一个网站与http和https。 我在.htaccess中设置了为http运行的以下行。

标题集Access-Control-Allow-Origin“*”

但用https我得到这个错误。

请求的资源上没有“Access-Control-Allow-Origin”标题。 原因' https://dl.dropboxusercontent.com '因此不允许访问。

我试了下面没有运气。

标题集访问控制允许来源“*”env = HTTPS

任何方式设置HTTPS的访问控制 – 允许源头的.htaccess?

这是我完整的.htaccess

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> <IfModule mod_headers.c> Header always set Access-Control-Allow-Origin "*" </IfModule> 

这是我的虚拟主机设置

 <VirtualHost *:443> ServerAdmin admin@localhost DocumentRoot /var/www/html/domain ServerName domain.com SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile "/etc/pki/tls/private/domain.crt" SSLCertificateKeyFile "/etc/pki/tls/private/domain.key" SSLCACertificateFile "/etc/pki/tls/private/domain.ca-bundle.crt" <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 ErrorLog logs/domain-error_log CustomLog logs/domain-access_log common <Directory "/var/www/html/domain"> AllowOverride All </Directory> </VirtualHost> 

任何解决scheme

没有完整的.htaccess我不知道,但是当更多的处理完成在Apache添加条件always可能需要:

 Header always set Access-Control-Allow-Origin "*" 

手册解释如下:

当你的动作是一个已经存在的头部的函数时,你可能需要指定一个始终的条件,这取决于原始头部被设置在哪个内部表格中。
始终对应的表格用于本地生成的错误响应以及成功的响应。 还要注意,在两种情况下重复使用这个指令是有意义的,因为在现有的头文件中总是不是onsuccess的超集。

  • 您正在为本地生成的非成功(非2xx)响应(例如redirect)添加一个标头,在这种情况下,只有对应于always的表才能用于最终响应。

  • 您正在修改或删除由CGI脚本生成的头文件,在这种情况下,CGI脚本位于与始终对应的表中,而不是在默认表中。

  • 您正在修改或删除某个服务器部分生成的标头,但该标头在默认的onsuccess条件中找不到。

我必须创build一个.php文件,以便通过request.php?f = main.jpg请求文件,而不是像domain.com/main.jpg那样直接请求文件。

这是一个有点丑陋的工作,但它的作品。 当然,我必须像这样添加标题访问控制允许来源。 这样,我不需要在.htaccess文件中指定该标题。

  if (isset($_SERVER['HTTP_ORIGIN']) && strpos($_SERVER['HTTP_ORIGIN'],'safedomain') !== false) { header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Max-Age: 86400'); // cache for 1 day } // Access-Control headers are received during OPTIONS requests if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); exit(0); } 

你正在使用自签名证书吗?

http://dev.housetrip.com/2014/04/17/unleash-your-ajax-requests-with-cors/

当请求使用自签名证书定位到HTTPS服务器时,可能会遇到困难。 可能的解决方法是将证书添加到您的可信列表中。 瘦Web服务器附带的证书将属于此类别。