2008-12-27 18 views
8

पर फ़ाइलों से गहरे लिंकिंग को रोकने के लिए कैसे करें मेरी वेबसाइट पर एक वेबसाइट है जिसमें बहुत से फ्रीवेयर सामान शामिल हैं। मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि दुनिया भर के लोग फ़ाइलों के लिए सीधे लिंक ले रहे हैं (उदाहरण के लिए .zip फाइलें) और उन्हें अपनी वेबसाइटों और सामान्य मंचों पर पोस्ट करना। मुझे बैंडविड्थ की एक बड़ी मात्रा मिल रही है और यह ठीक है, लेकिन देखे गए पृष्ठों की संख्या कम है। क्या कोई तरीका या एक स्क्रिप्ट है जिसे मैं लिंक में जोड़ सकता हूं, ताकि जब कोई विदेशी वेबसाइट से लिंक पर दबाए, तो मेरी वेबसाइट का एक पृष्ठ इसके बजाय खुलता है, जिससे उसे फ़ाइल डाउनलोड करने देता है ताकि मैं और अधिक विज़िट कर सकूं।मेरी वेबसाइट

http://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip

किसी को भी इस पर दबाता है, तो यह डाउनलोड प्रक्रिया सीधे शुरू कर देंगे:

उदाहरण के लिए, यह मेरी वेबसाइट से एक का पता है।

उत्तर

16

यदि आप PHP का उपयोग कर रहे हैं, तो आपके पास एक स्क्रिप्ट हो सकती है जो उपयोगकर्ता को डाउनलोड करने के लिए लिंक करती है लेकिन केवल $_SERVER['HTTP_REFERER'] आपकी साइट से है। यदि यह आपकी साइट पर रीडायरेक्ट नहीं है।

+0

क्या आप मुझे स्क्रिप्ट पर ले जा सकते हैं और अपने उत्तर के लिए थोड़ी अधिक Thanx बता सकते हैं –

+0

मैं थोड़ा सा भाग रहा हूं, बीमार होने पर मैं एक साधारण उदाहरण बनाने में सक्षम हूं। –

+0

@ Ólafur Waage Thanx bro मैं आपके प्रयास की सराहना करता हूं –

11

आपके द्वारा सेवा की जा रही फ़ाइल का सीधा लिंक प्रदान न करें। एक बार स्क्रिप्ट प्रदान करें जो सबमिट बटन दबाए जाने पर स्क्रिप्ट के माध्यम से सामग्री भेजता है।

सीजीआई के माध्यम से फाइल भेजने के लिए एक वेब खोज करें।

यहाँ एक साफ लिंक मैंने पाया ऑनलाइन है: here

0

मैं सभी एक वेब विशेषज्ञ पर नहीं कर रहा हूँ, लेकिन मैं निम्नलिखित सूचक के बारे में सोच रहा था - आप asp.net उपयोग कर रहे हैं

वेब साइट स्तर की सहायता पर कॉन्फ़िगर किए गए http हैंडलर या मॉड्यूल (वेब ​​पर उन लोगों पर बहुत सारी जानकारी, मैंने हाल ही में कुछ कामों के लिए इसे देखा है, उदाहरण के लिए यहां एक article है।

विचार इससे पहले अनुरोध को रोकना है लक्ष्य फ़ाइल तक पहुंचता है और इसे उस पृष्ठ पर रीडायरेक्ट करता है जिसे आप दिखाना चाहते हैं ; उदाहरण के लिए - यदि कोई आपके द्वारा पोस्ट किए गए यूआरएल पर ब्राउज़ करना चाहता है ("http://sy-stu.org/stu/PublicFiles/StdLibrary/Exam.zip") इस कॉल को रोकें, उस पृष्ठ को ढूंढने के लिए कुछ लुकअप का उपयोग करें जिसे आप प्रदर्शित करना चाहते हैं और अनुरोध को पुनर्निर्देशित करें; मैं एक लिंक के बाद उपयोगकर्ताओं का अनुमान लगा रहा हूं बहुत नाराज न हों (जब तक कि उन्होंने "लक्ष्य को बचाने के लिए" नहीं किया है, जिसके परिणामस्वरूप उन्हें कुछ HTML सहेजना होगा और ज़िप नहीं होगा)।

हालांकि, मेरी योजना में कुछ "छेद" है - आप वास्तव में एक लिंक प्रदान करते हैं जो आपके अपने पृष्ठ से काम करता है? मेरा मानना ​​है कि आप अपनी वेबसाइट से आने वाले अनुरोधों और दूसरों से आने वाले अनुरोधों के बीच अंतर कर सकते हैं, जिसे आप अनुरोध ऑब्जेक्ट की जांच करके हैंडलर/मॉड्यूल पर देख सकते हैं।

18

आपकी साइट ने एक Apache वेब सर्वर द्वारा होस्ट किया गया है, तो आप अपनी साइट के httpd.conf में निम्न (या आभासी मेजबान ब्लॉक) करने के लिए

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/ [NC] 
RewriteRule ^/PublicFiles/ /page-about-direct-links.html 

वह मूल रूप से कह रहा है सक्षम होना चाहिए:

  1. पर mod_rewrite इंजन चालू HTTP संदर्भ खाली नहीं है, तो ...
  2. और साथ में "www के बिना अपने डोमेन नाम शामिल नहीं है (।") ...
  3. के तहत/PublicFiles/कुछ भी के लिए किसी भी अनुरोध को पुन: निर्देशित mod_rewrite पर

अधिक जानकारी /page-about-direct-links.html करने के लिए यहाँ पाया जा सकता है: mod_rewrite - Apache HTTP Server

+0

"आप साइट हैं" मूल रूप से कह रहे हैं "आप साइट हैं"। – Svante

+0

धन्यवाद। मुझे लगता है कि मैंने मूल रूप से लिखा था "आप अपाचे चला रहे हैं ..." लेकिन यह नहीं मानना ​​था कि वह अपना सर्वर चला रहा था। –

+0

वहां, मैंने आपके लिए अपना तर्क तय किया है :) 'रिवाइटकंड 'डिफ़ॉल्ट (यहां वांछित) * और * के साथ स्थितियों को गठबंधन करना है, और'! 'का अर्थ है कि निम्न अभिव्यक्ति * नहीं * मेल खाता है। मैंने आपके अभिव्यक्तियों को भी अनुकूलित किया है क्योंकि मैंने सोचा था कि आप उनका मतलब है। – PointedEars

1

क्यों बस नहीं लिंक गतिशील और अप्रत्यक्ष, उदाहरण के लिए:

पेज एक्स पर

: (स्थिर) पेज Y पर

<a href="Y">SuperNeat Program</a> 

: (dynamicall y उत्पन्न)

Click here to download 
<a href="Z.php?timestamp={timestamp}&counter={counter}&hash={hash}"> 
SuperNeat Program</a> 

और के बाद से 1970, काउंटर w/msec में वर्तमान समय टाइमस्टैम्प की जगह = एक काउंटर है कि आप प्रति डाउनलोड, हैश एक बार को बढ़ा देते = CONCATENATE (टाइमस्टैम्प, काउंटर का MD5 हैश, गुप्त नमक) जहां गुप्त नमक = कोई पसंदीदा कोड जो आप गुप्त रखते हैं।

फिर पेज Z.php पर, आप क्वेरी स्ट्रिंग में काउंटर और टाइमस्टैम्प से हैश को फिर से समझें, जांचें कि यह क्वेरी स्ट्रिंग में हैश से मेल खाता है, और टाइमस्टैम्प हाल ही में है (उदाहरण के लिए पिछले 30 मिनट से या 60 मिनट या जो भी हो)। यदि ऐसा है, तो सवाल में फ़ाइल की सेवा करें। यदि ऐसा नहीं है, तो एक त्रुटि संदेश फेंक दें। यह आपकी फाइल को सीधे लिंक करने के लिए किसी को केवल एक संक्षिप्त समय अवधि देता है। यदि आप इसे भी नहीं चाहते हैं, तो Z.php क्वेरी स्ट्रिंग में प्राप्त काउंटर मानों का ट्रैक रखें और उन्हें एक से अधिक बार स्वीकार न करें।

संबंधित मुद्दे