aktivieren Sie cors in .htaccess

Lesezeit: 5 Minuten

1646262547 333 aktivieren Sie cors in htaccess
Devin Crossmann

Ich habe einen grundlegenden RESTful-Dienst mit dem SLIM-PHP-Framework erstellt und versuche jetzt, ihn so zu verkabeln, dass ich von einem Angular.js-Projekt aus auf den Dienst zugreifen kann. Ich habe gelesen, dass Angular CORS standardmäßig unterstützt, und ich musste nur diese Zeile hinzufügen: Header set Access-Control-Allow-Origin "*" zu meiner .htaccess-Datei.

Ich habe dies getan und meine REST-Anwendung funktioniert immer noch (kein 500-interner Serverfehler von einem fehlerhaften .htaccess), aber wenn ich versuche, es zu testen, funktioniert es immer noch test-cors.org es wirft einen Fehler.

Fired XHR event: loadstart
Fired XHR event: readystatechange
Fired XHR event: error

XHR status: 0
XHR status text: 
Fired XHR event: loadend

Meine .htaccess-Datei sieht so aus

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"

Muss ich meiner .htaccess-Datei noch etwas hinzufügen, damit dies ordnungsgemäß funktioniert, oder gibt es eine andere Möglichkeit, CORS auf meinem Server zu aktivieren?

1646262547 333 aktivieren Sie cors in htaccess
Devin Crossmann

Da ich sowieso alles an index.php weitergeleitet hatte, dachte ich, ich würde versuchen, die Header in PHP anstelle der .htaccess-Datei zu setzen, und es hat funktioniert! YAY! Hier ist, was ich zu index.php für alle anderen hinzugefügt habe, die dieses Problem haben.

// 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']}");

}

Die Antwort auf diese Frage geht an Slashingweapon

Da ich Slim verwende, habe ich diese Route hinzugefügt, damit OPTIONS-Anfragen eine HTTP 200-Antwort erhalten

// return HTTP 200 for HTTP OPTIONS requests
$app->map('/:x+', function($x) {
    http_response_code(200);
})->via('OPTIONS');

  • Du hast bisher vier Leben gerettet, obwohl ich dachte, ich brauche es nur header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); . Danke !

    – raph77777

    10. Oktober 2016 um 16:58 Uhr

  • Nachdem ich die andere Antwort überprüft habe, habe ich Bedenken hinsichtlich Ihrer Lösung. Der Autor slashingweapon fügte einen von Ihnen entfernten Kommentar hinzu, der Sie dazu aufforderte, eine Logik hinzuzufügen, um zu entscheiden, ob der Ursprung ein vertrauenswürdiger Ursprung war. Hier haben Sie es blind entfernt und jeden Ursprung akzeptiert. Keine gute Praxis.

    – Jo

    15. Juni 2018 um 22:18 Uhr

  • @ Joe guter Punkt. Ich habe die Antwort mit einem Kommentar zur Überprüfung des Ursprungs aktualisiert

    – Devin Crossmann

    16. Juni 2018 um 0:00 Uhr

Sollte das nicht .htaccess verwenden add anstatt set?

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"

  • Danke! das hat mein Problem gelöst! Ich benutzte set und es hat nicht funktioniert, das Ändern mit add hat es behoben. Für das, was es wert ist, wurde dies auf einem WordPress-Blog gemacht, mit einigen anderen Dingen in der .htaccess-Datei

    – BBog

    6. Januar 2014 um 19:40 Uhr

  • Die Dokumentation hier sagt “set” enable-cors.org/server_apache.html . Hat wahrscheinlich viele Probleme verursacht!

    – Ryan Wie

    1. Januar 2017 um 13:02 Uhr

  • Ich habe von set zu add geändert und erhalte immer noch Response for preflight has invalid HTTP status code 400 ..bitte vorschlagen ..habe meinen vollständigen Beitrag hier beschrieben: magento.stackexchange.com/questions/170342/…

    – Sushivam

    16. April 2017 um 6:02 Uhr


  • Mir hat die erste Zeile gereicht. Außerdem denke ich, dass die zweite Zeile keinen Doppelpunkt haben sollte?

    – kslstn

    13. Februar 2020 um 10:07 Uhr


  • Apache doc sagt ist “set” httpd.apache.org/docs/2.4/mod/mod_headers.html ?

    – DrLightman

    4. September 2020 um 11:31 Uhr

1646262547 916 aktivieren Sie cors in htaccess
Jack Leon

Das hat bei mir funktioniert:

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"

1646262548 995 aktivieren Sie cors in htaccess
jkubisch

Wie in dieser Antwort können Sie benutzerdefinierten HTTP-Header für eine bestimmte Datei verwenden <File> So aktivieren Sie CORS für eine einzelne Datei mit diesem Code:

<Files "index.php">
  Header set Access-Control-Allow-Origin "*"
  Header set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
</Files>

Anstatt "*" Sie können einen bestimmten Ursprung angeben (Protokoll + Domäne + optionaler Port).

1646262548 548 aktivieren Sie cors in htaccess
Levin

Wird zu 100% funktionieren, bewerben Sie sich 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]

  • Ich möchte nur hinzufügen, dass es notwendig ist, die SetEnvIf-Anweisung zu bearbeiten, die definiert, welche Fernbedienungen (1xyz.com, 2xyz.com) CORS-Zugriff haben.

    – Benutzer1298923

    15. Oktober 2019 um 17:30 Uhr

1646262549 865 aktivieren Sie cors in htaccess
Santanu Brahma

Es sieht so aus, als ob Sie eine alte Version von slim(2.x) verwenden. Sie können einfach die folgenden Zeilen zu .htaccess hinzufügen und müssen nichts in PHP-Skripten tun.

# 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]

  • Ich möchte nur hinzufügen, dass es notwendig ist, die SetEnvIf-Anweisung zu bearbeiten, die definiert, welche Fernbedienungen (1xyz.com, 2xyz.com) CORS-Zugriff haben.

    – Benutzer1298923

    15. Oktober 2019 um 17:30 Uhr

1646262549 490 aktivieren Sie cors in htaccess
Jakow L

Dank Devin habe ich die Lösung für meine SLIM-Anwendung mit Multi-Domain-Zugriff gefunden.

Im 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);
});

917100cookie-checkaktivieren Sie cors in .htaccess

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy