Ssl
在 .htaccess 中為 Https 協議設置 Access-Control-Allow-Origin
我有一個帶有 http 和 https 的網站。我在 .htaccess 中設置了為 http 執行的以下行。
標頭集 Access-Control-Allow-Origin “*”
但是使用 https 我得到了這個錯誤。
請求的資源上不存在“Access-Control-Allow-Origin”標頭。因此,不允許訪問來源“ https://dl.dropboxusercontent.com ”。
我嘗試了以下沒有運氣。
標頭集 Access-Control-Allow-Origin “*” env=HTTPS
有什麼方法可以在 .htaccess 中為 https 設置 Access-Control-Allow-Origin 標頭?
這是我完整的 .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>
有什麼解決辦法嗎?
我必須創建一個 .php 以便通過 request.php?f=main.jpg 請求文件,而不是像 domain.com/main.jpg 那樣直接請求它
這是一個有點醜陋的工作,但它有效。當然,我必須像這樣添加標題 Access-Control-Allow-Origin。這樣我就不需要在 .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); }
如果沒有完整的 .htaccess 我不完全知道,但是當在 Apache 中完成更多處理時,
always
可能需要添加條件:Header always set Access-Control-Allow-Origin "*"
手冊解釋如下:
當您的操作是現有標頭的函式時,您可能需要指定條件always,具體取決於原始標頭設置在哪個內部表中。與always
對應的表用於本地生成的錯誤響應以及成功回應。另請注意,在某些情況下,在這兩個條件下重複此指令是有意義的,因為相對於現有標頭,它始終不是onsuccess的超集:
- 您正在向本地生成的非成功(非 2xx)響應(例如重定向)添加標頭,在這種情況下,最終響應中僅使用始終對應的表。
- 您正在修改或刪除由 CGI 腳本生成的標頭,在這種情況下,CGI 腳本位於始終對應的表中,而不是預設表中。
- 您正在修改或刪除由伺服器的某些部分生成的標頭,但預設的 onsuccess 條件未找到該標頭。