htaccess पहुंच-नियंत्रण-अनुमति-उत्पत्ति


134

मैं एक स्क्रिप्ट बना रहा हूं जो अन्य साइटों पर बाहरी रूप से लोड होती है। यह CSS और HTML को लोड करता है और मेरे अपने सर्वर पर ठीक काम करता है।

हालाँकि, जब मैं इसे किसी अन्य वेबसाइट पर आज़माता हूँ तो यह इस भयानक त्रुटि को प्रदर्शित करता है:

Access-Control-Allow-Origin

यहाँ आप इसे पूरी तरह से देख सकते हैं: http://tzook.info/bot/

लेकिन इस अन्य वेबसाइट पर यह त्रुटि दिखाता है: http://cantloseweight.co/robot/

मैंने लोडिंग स्क्रिप्ट को jsfiddle: http://jsfiddle.net/TL5LK/ पर अपलोड किया

मैंने इस तरह htaccess फ़ाइल को संपादित करने की कोशिश की:

<IfModule mod_headers.c>    
    Header set Access-Control-Allow-Origin *
</IfModule>

या इस तरह:

Header set Access-Control-Allow-Origin *

लेकिन यह अभी भी काम नहीं करता है।

जवाबों:


270

बाहरी रूट फ़ोल्डर के .htaccess में इसे आज़माएँ:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

और अगर यह केवल .js लिपियों की चिंता करता है तो आपको उपरोक्त कोड को इसके अंदर लपेट देना चाहिए:

<FilesMatch "\.(js)$">
...
</FilesMatch>

6
का उपयोग करने पर महान सलाह FilesMatch
नट

1
यदि हम फाइलमैच ब्लॉक को जोड़कर फाइलों का मिलान करते हैं, तो क्या करता *है?
शेनकेन

और क्या मुझे ऐसा करने के बाद सर्वर को पुनरारंभ करने की आवश्यकता है? मैं ऊपर कोड लागू करता हूं, लेकिन यह अभी भी मुझे एक्सेस करने की अनुमति नहीं देगा । Json, मैं बदल jsगया json
शेनकेन

3
@shenkwen *किसी भी मूल डोमेन को इस संसाधन तक पहुँचने की अनुमति देता है। यह संसाधनों की सूची नहीं है, बल्कि संदर्भित डोमेन की सूची है।
स्पार्क

3
यदि यह काम नहीं करता है, तो आपको headersमॉड्यूल को सक्षम करने का प्रयास करना चाहिए :a2enmod headers
जोकिन ओ

53

कोई यह नहीं कहता है कि आपके पास mod_headers सक्षम होना चाहिए, इसलिए यदि अभी भी काम नहीं कर रहा है, तो यह प्रयास करें:

(निम्नलिखित टिप्स उबंटू पर काम करते हैं, अन्य वितरण के बारे में नहीं जानते हैं)

आप के साथ लोड मॉड्यूल की सूची की जाँच कर सकते हैं

apache2ctl -M

mod_headers को सक्षम करने के लिए आप उपयोग कर सकते हैं

a2enmod headers

बेशक अपाचे में किसी भी परिवर्तन के बाद आपको इसे फिर से शुरू करना होगा:

/etc/init.d/apache2 restart

तब आप उपयोग कर सकते हैं

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

और अगर mod_headers सक्रिय नहीं हैं, तो यह लाइन कुछ भी नहीं करेगी। यदि आप क्लॉज़ और Header set Access-Control-Allow-Origin "*"अपने कॉन्फ़िगर में जोड़ते हैं तो आप स्किप को आज़मा सकते हैं , अगर mod_headers सक्रिय नहीं है, तो इसे प्रारंभ के दौरान त्रुटि फेंकनी चाहिए।


3
सभी विकल्पों की कोशिश कर रहा हूं जो मुझे Google पर मिल सकते हैं और जैसा कि आपने कहा, किसी ने भी mod_headers के बारे में कुछ नहीं कहा। धन्यवाद!
सिरकॉन्ग

1
मेरे mod_headers सक्रिय हैं और इस लाइन को .htaccess (बताए गए स्थान के समान) में जोड़ दिया है, लेकिन फिर भी मुझे यह त्रुटि मिल रही है: Preflight के लिए प्रतिक्रिया में अमान्य HTTP स्थिति कोड 400 है..प्लस सुझाव!
सुशीवम १६'१

1
mod_headers गायब चीज़ थी! यह पूरी तरह से .htaccess नियम के साथ काम कर रहा है। धन्यवाद।
एंडी

@ SachinS 400 त्रुटि नहीं मिली है, 500 सर्वर त्रुटि है। वहाँ शुरू करो।
एंडी

30

मेरे अनुभव से;

अगर यह भीतर से काम नहीं करता है phpमें यह कर .htaccessयह मेरे लिए काम किया

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin http://www.vknyvz.com  
    Header set Access-Control-Allow-Credentials true
</IfModule>
  • क्रेडेंशियल आपके ajax अनुरोध के आधार पर सही या गलत हो सकते हैं

यह मेरे लिए काम नहीं करता था, लेकिन मैं इसे php, उसी सिद्धांत में काम करने में सक्षम था।
RevNoah

16

.htaccessअपने फोंट फ़ोल्डर में निम्नलिखित निर्देशों के साथ एक फ़ाइल जोड़ें , अगर आपके फोंट तक पहुंचने में समस्याएं हैं। .Css या .js फ़ाइलों के साथ उपयोग के लिए आसानी से संशोधित किया जा सकता है ।

<FilesMatch "\.(eot|ttf|otf|woff)$">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

1
यह ध्यान दिया जाना चाहिए कि उपरोक्त <FilesMatch>निर्देश अनावश्यक है, यदि , जैसा कि ऊपर सुझाव दिया गया है, आपकी .htaccessफ़ाइल आपके फोंट निर्देशिका में है और आपके फोंट निर्देशिका में केवल शामिल हैं .eot, ttf, .otfऔर / या .woffफाइलें।
मेसागोमा

9

अन्य जवाब मेरे काम नहीं आए, यह वही है जो अपाचे 2 के लिए ट्रिक कर रहा है:

1) हेडर मॉड सक्षम करें:

sudo a2enmod headers

2) /etc/apache2/mods-enabled/headers.confफ़ाइल बनाएँ और डालें:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

3) अपने सर्वर को पुनरारंभ करें:

sudo service apache2 restart


यह एकमात्र समाधान है जिसने मेरे Ubuntu 16.10 सर्वर पर मेरे लिए काम किया।
नीक्की

इसने मेरे लिए भी काम किया। मैं Ubuntu 16.04 सर्वर का उपयोग कर रहा हूं। धन्यवाद।
jhedm

मेरे लिए उबंटू 18.04 पर काम किया। फ़ायरफ़ॉक्स 70.0.1 केवल एक्सेस-कंट्रोल-अलाउंस-ओरिजिन हेडर से खुश नहीं था, हालाँकि, और मुझे एक्सेस-कंट्रोल-अलाउंस-मेथड्स को भी जोड़ना था।
बोरिज़्ज़ज़

@songololo मैं सेंटोस 7 में अपाचे के लिए इस फाइल का पता नहीं लगा सका। मैंने / etc / httpd निर्देशिका में हर जगह देखा। क्या आप कृपया मुझे बता सकते हैं कि मैं इसे सेंटोस पर कैसे लागू कर सकता हूं?
मेनुद्दीन

@ मेनुद्दीन, क्षमा करें, मैं सेंटोस से परिचित नहीं हूं। उम्मीद है कि कोई और इसमें झंकार कर सकता है।
गीतोलो

7

Zend फ्रेमवर्क 2.0 में मुझे यह समस्या थी। दो तरह से हल किया जा सकता है ।htaccess या php हैडर जो मुझे पसंद है।।

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

सेवा

RewriteEngine On

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

और यह काम करना शुरू कर देता है


इसने मेरे दिन को बचाया, php कूपडेंट काम, इसलिए htaccess ने किया।
Relm

4

BTW: .htaccess config को API होस्ट करने वाले सर्वर पर किया जाना चाहिए। उदाहरण के लिए, आप x.com डोमेन पर एक AngularJS ऐप बनाते हैं और y.com पर एक रेस्ट एपीआई बनाते हैं, आपको y.com नहीं x के रूट फ़ोल्डर में .htaccess फ़ाइल तक पहुँच-नियंत्रण-अनुमति-उत्पत्ति "*" सेट करनी चाहिए। .com :)

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

जैसा कि लुकास ने उल्लेख किया है कि यदि आप अपाचे का उपयोग करते हैं तो आपने mod_headers सक्षम किया है


1

सुनिश्चित करें कि आपके पास पुनर्निर्देशन नहीं हो रहा है। यदि आप URL में अनुगामी स्लैश शामिल नहीं करते हैं तो यह हो सकता है।

अधिक विस्तार के लिए इस उत्तर को देखें - https://stackoverflow.com/a/27872891/614524


0

यदि आपका होस्ट पावन या समर्पित नहीं है, तो सर्वर को पुनः आरंभ करना भिन्न है।

मुझसे बेहतर समाधान, बस अपनी CSS फ़ाइल (किसी अन्य डोमेन या आपके उप डोमेन पर) को संपादित करें, जो फ़ॉन्ट eot, woff आदि को आपके मूल (आपका डोमेन या www yourdomain) कहती है। यह आपकी समस्या का समाधान करेगा।

मेरा मतलब है, पूर्ण यूआरएल मूल डोमेन के लिए सीएसएस पर रिश्तेदार यूआरएल संपादित करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.