0

24 시간 동안 사용해 본 결과, Google에서 내 문제를 해결할 수있는 솔루션을 찾을 수 없습니다.Apache/Laravel 403 금지됨 - 헤더 허용 안함

저는 Laravel 4.2 API와 AngularJS 1.3 프론트 엔드로 구성된 웹 사이트를 개발하고 있습니다.

패키지 laravel-cors를 사용하여 CORS on Laravel을 사용할 수 있으며 어제 아침까지 요청이 잘 작동하고 있습니다 (아무도 서버에 아무 것도 배포하지 않았습니다. 이상하게 보입니다).

Chrome/Safari/IE에서 내 API (PUT/POST/DELETE)에 액세스하려고 할 때 모든 주요 브라우저에서 문제가 발생하지만 Angular가 프리 플라이트 OPTIONS 요청을 생성하고이 오류로 403 오류가 발생합니다. 메시지 :

요청한 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다.

없음 나는이 볼 처음으로, 그래서 laravel-고르에 확인, 모든, 그리고 그것을 잘 작동하고 (크롬)에 파이어 폭스와 POSTMAN와도 각도에서 확인을 보인다. 여기

내 laravel-고르
return array(

    'defaults' => array(
     'supportsCredentials' => true, 
     'allowedOrigins' => array('http://localhost', 'http://example.com'), 
     'allowedHeaders' => array('Content-Type','X-Requested-With','accept','Origin','Access-Control-Request-Method','Access-Control-Request-Headers','Authorization'), 
     'allowedMethods' => array('GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'), 
     'exposedHeaders' => array(), 
     'maxAge' => 0, 
     'hosts' => array(), 
    ), 
); 

그리고 내 아파치 웹 서버에 크롬과 파이어 폭스에 의해 전송 된 요청을 비교

// Allow credentials 
$httpProvider.defaults.withCredentials = true; 
$httpProvider.defaults.useXDomain = true; 

각 측면에 설정

이고, 나는 컬로 재현 .

첫번째는 크롬에서오고,

curl 'http://api.example.com' -X OPTIONS -H 'Pragma: no-cache' -H 'Access-Control-Request-Method: POST' -H 'Origin: http://example.com' -H 'Acc 
    ept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36' -H 'Accept: */*' -H 'Cache-Control: no-cache' -H 'Referer: http://example.com/' -H 'Connection: keep-alive' -H 'Access-Control-Request-Headers: accept, content-type' --compressed 

나는에을 받아 를 제거하면 "헤더을 할 수 없습니다"반환 액세스 제어 - 요청 - 헤더 HTTP 헤더가 잘 작동하고 및 Firefox 및 다른 브라우저와의 차이점입니다. 여기

<VirtualHost *:80> 

     ServerAdmin [email protected] 
     ServerName api.example.com 

     DocumentRoot /var/www/shoptruc/api/public 

     ErrorLog ${APACHE_LOG_DIR}/error.log 
     CustomLog ${APACHE_LOG_DIR}/access.log combined 

     <Directory "/var/www/shoptruc/api/public"> 
       AllowOverride All 
       Order allow,deny 
       Allow from all 
     </Directory> 
</VirtualHost> 

누구 아이디어가 있습니까 내 아파치 구성 및 Laravel htaccess로

htaccess로

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 

가상 호스트는

입니까? 나는 지금 당황했다. Laravel App :: before() 필터에 코드를 작성하려고했지만 필터가 시작되지 않았습니다.

PS : 테스트해야하는 경우 http://api.roadtotark.com/auth/login :

답변

3

대에 POST를 보낼 수 있습니다, 나는 해결책을 발견했다. 나는 laravel-cors를 비활성화 시켰으며이 구성으로 public/.htaccess의 교차 도메인을 활성화했습니다.

# with AJAX withCredentials=false (cookies NOT sent) 
Header always set Access-Control-Allow-Origin "*"     
Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE" 
Header always set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type" 
RewriteEngine On     
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]] 

# with AJAX withCredentials=true (cookies sent, SSL allowed...) 
SetEnvIfNoCase ORIGIN (.*) ORIGIN=$1 
Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE" 
Header always set Access-Control-Allow-Origin "%{ORIGIN}e" 
Header always set Access-Control-Allow-Credentials "true" 
Header always set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type" 
RewriteEngine On 
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}] 

모든 것이 잘 작동합니다! 희망이 미래에 동일한 문제가있는 누군가를 도울 것입니다.

1

똑같은 문제가 2 일 동안 직면했습니다. 마지막으로 내가 public_html 폴더에 내 .htaccess로 추가 할 때이 라인은 속임수를 썼는지 :

<Limit GET POST PUT DELETE> 
    Allow from all 
</Limit> 

는 미래의 독자 도움이되기를 바랍니다!