.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로 헤더를 설정해 보려고 했는데, 잘 작동했습니다!YAY! 여기 이 문제가 있는 다른 사람을 위해 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']}");
}
Slim을 사용하고 있기 때문에 OPTIONS 요청이 HTTP 200 응답을 얻을 수 있도록 이 루트를 추가했습니다.
// return HTTP 200 for HTTP OPTIONS requests
$app->map('/:x+', function($x) {
http_response_code(200);
})->via('OPTIONS');
그러면 안 돼요?.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>
대신"*"
특정 오리진(표준 + 도메인 + 옵션 포트)을 배치할 수 있습니다.
100% 기능합니다. .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]
오래된 버전의 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]
Devin 덕분에 멀티 도메인 액세스가 가능한 SLIM 애플리케이션을 위한 솔루션을 찾을 수 있었습니다.
인 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
index.displaces에 있습니다.
// 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);
});
@abimelex 솔루션을 사용해 보았습니다만, Slim 3.0에서는 OPTIONS 요구를 매핑할 수 있는 것은 다음과 같습니다.
$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
'sourcecode' 카테고리의 다른 글
정수를 선행 0 문자열로 포맷하는 가장 좋은 방법? (0) | 2022.09.24 |
---|---|
Android - 사용자 정의(복합) 구성 요소 작성 (0) | 2022.09.24 |
Class.getName() 클래스 이름만 가져옵니다. (0) | 2022.09.24 |
MySQL "WITH" 절 (0) | 2022.09.24 |
Collections.emptyList()와 Collections의 차이점은 무엇입니까?빈 목록 (0) | 2022.09.24 |