.htaccess에서 cors 활성화
SLIM PHP 프레임 워크로 기본 RESTful 서비스를 만들었으며 이제 Angular.js 프로젝트에서 서비스에 액세스 할 수 있도록 연결하려고합니다. Angular가 CORS를 기본적으로 지원한다는 것을 읽었으며이 줄 Header set Access-Control-Allow-Origin "*"
을 .htaccess 파일 에 추가하기 만하면되었습니다.
이 작업을 수행했으며 REST 응용 프로그램이 여전히 작동하고 있지만 (나쁜 .htaccess에서 500 내부 서버 오류가 없음) test-cors.org 에서 테스트하려고 하면 오류가 발생합니다.
Fired XHR event: loadstart
Fired XHR event: readystatechange
Fired XHR event: error
XHR status: 0
XHR status text:
Fired XHR event: loadend
내 .htaccess 파일은 다음과 같습니다.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [QSA,L]
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
제대로 작동하려면 .htaccess에 추가해야하는 다른 것이 있습니까? 아니면 서버에서 CORS를 활성화하는 다른 방법이 있습니까?
어쨌든 모든 것이 index.php로 전달되었으므로 .htaccess 파일 대신 PHP에서 헤더를 설정하려고 생각했고 작동했습니다! 예! 이 문제가있는 다른 사람을 위해 index.php에 추가 한 내용은 다음과 같습니다.
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
// should do a check here to match $_SERVER['HTTP_ORIGIN'] to a
// whitelist of safe domains
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, PUT, DELETE, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
이 질문 에 대한 그의 답변에 대한 신용은 slashingweapon에 있습니다.
Slim을 사용하고 있기 때문에 OPTIONS 요청이 HTTP 200 응답을 받도록이 경로를 추가했습니다.
// return HTTP 200 for HTTP OPTIONS requests
$app->map('/:x+', function($x) {
http_response_code(200);
})->via('OPTIONS');
Should't .htaccess
사용 add
대신을 set
?
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
이것은 나를 위해 일한 것입니다.
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
이 답변에서와 같이 특정 파일에 대한 사용자 지정 HTTP 헤더에서<File>
다음 코드로 단일 파일에 대해 CORS를 활성화 하는 데 사용할 수 있습니다 .
<Files "index.php">
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
</Files>
이전 버전의 slim (2.x)을 사용중인 것 같습니다. .htaccess에 다음 줄을 추가 할 수 있으며 PHP 스크립트에서 아무것도 할 필요가 없습니다.
# Enable cross domain access control
SetEnvIf Origin "^http(s)?://(.+\.)?(domain_one\.com|domain_two\.net)$" REQUEST_ORIGIN=$0
Header always set Access-Control-Allow-Origin %{REQUEST_ORIGIN}e env=REQUEST_ORIGIN
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE"
Header always set Access-Control-Allow-Headers: Authorization
# Force to request 200 for options
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* / [R=200,L]
Will be work 100%, Apply in .htaccess:
# Enable cross domain access control
SetEnvIf Origin "^http(s)?://(.+\.)?(1xyz\.com|2xyz\.com)$" REQUEST_ORIGIN=$0
Header always set Access-Control-Allow-Origin %{REQUEST_ORIGIN}e env=REQUEST_ORIGIN
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "x-test-header, Origin, X-Requested-With, Content-Type, Accept"
# Force to request 200 for options
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* / [R=200,L]
Thanks to Devin, I figured out the solution for my SLIM application with multi domain access.
In htaccess:
SetEnvIf Origin "http(s)?://(www\.)?(allowed.domain.one|allowed.domain.two)$" AccessControlAllowOrigin=$0$1
Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials true
in index.php
// 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, PUT, DELETE, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
// instead of mapping:
$app->options('/(:x+)', function() use ($app) {
//...return correct headers...
$app->response->setStatus(200);
});
I tried @abimelex solution, but in Slim 3.0, mapping the OPTIONS requests goes like:
$app = new \Slim\App();
$app->options('/books/{id}', function ($request, $response, $args) {
// Return response headers
});
https://www.slimframework.com/docs/objects/router.html#options-route
참고URL : https://stackoverflow.com/questions/14467673/enable-cors-in-htaccess
'IT Share you' 카테고리의 다른 글
GNU sed 및 BSD / OSX sed 모두에서 작업하려면 내부 편집을 위해 sed -i 명령이 필요합니다. (0) | 2020.12.09 |
---|---|
Java ArrayList-목록이 비어 있는지 확인 (0) | 2020.12.09 |
파이썬에서 json 문자열을 객체로 역 직렬화 (0) | 2020.12.09 |
StreamReader를 사용하여 외국 문자 읽기 C # 도움말 (0) | 2020.12.09 |
Play!를 사용하여 Java 클래스에서 application.conf 속성에 액세스 (0) | 2020.12.09 |