اگر از wordpress رو حالت https استفاده میکنید ممکنه در حالتی به خطای Access-Control-Allow-Origin برخورد کنید .

این حالت چه زمانی پیش میاد ؟

فرض کنیم وردپرس بروی دامنه ی moh3n.net نصب شده و میخواید که ویدئوهایی ( کلا فایل css, js ) که پست میکنید از داخل این دامنه نباشه و از دامنه ی دومی مثلا ali.net قراره لود بشه . اینجا مرورگر به برای امنیت به شما اجازه این اتفاق رو نمیده و باید policy تعریف کنیم ( اینجا چون پیشفرض بر اینه که روی هاست نصب شده وردپرس ) در فایل .htaccess هاست اول یعنی moh3n.net .

یه این شکل :

 

<ifmodule mod_headers.c="">
SetEnvIf Origin "^(.*\.ali\.net)$" ORIGIN_SUB_DOMAIN=$1
Header set Access-Control-Allow-Origin "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN
Header set Access-Control-Allow-Methods: "*"
Header set Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept, Authorization"
</ifmodule>

اینجا تمام sub domain های ali.net از دامنه مبدا دارای مجوز هستن و دیگه مرورگر خطا نخواهد داد .  همین کار رو برای اپاچی هم میشه انجام داد

 

<IfModule mod_rewrite.c>
<IfModule mod_headers.c>
SetEnvIf Origin .+ ACCESS_CONTROL_ROOT=yourdomain.com
RewriteEngine On
RewriteCond %{ENV:ACCESS_CONTROL_ROOT} !=""
RewriteCond %{ENV:ACCESS_CONTROL_ORIGIN} =""
RewriteCond %{ENV:ACCESS_CONTROL_ROOT}&%{HTTP:Origin} ^([^&]+)&(https?://(?:.+?\.)?\1(?::\d{1,5})?)$
RewriteRule .* - [E=ACCESS_CONTROL_ORIGIN:%2]
Header set Access-Control-Allow-Origin %{ACCESS_CONTROL_ORIGIN}e env=ACCESS_CONTROL_ORIGIN
</IfModule>
</IfModule>

و برای nginx :

 

server {
root /path/to/your/stuff;
index index.html index.htm;
set $cors "";
if ($http_origin ~* (.*\.yoursweetdomain.com)) {
set $cors "true";
}
server_name yoursweetdomain.com;
location / {
if ($cors = "true") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
}
if ($request_method = OPTIONS) {
return 204;
}
}
}
 

Comments powered by CComment