1. ホーム
  2. php

[解決済み] .htaccessでcorsを有効にする

2023-04-25 22:03:27

質問

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');