2009-02-25 17 views
19

का उपयोग करके https (और इसके विपरीत) से http से लिंक करने का संक्षिप्त तरीका जब मैं एक वेब साइट के सुरक्षित हिस्से में हूं (मैं एक विशिष्ट पृष्ठ या https का उपयोग कर फ़ोल्डर में प्रवेश कर रहा हूं), सापेक्ष लिंक सामान्य पृष्ठों को स्वचालित रूप से https में भी परिवर्तित कर दिया जाता है।रिश्तेदार लिंक

क्या < > टैग को https प्रोटोकॉल (या दूसरी तरफ के आसपास) के बजाय हमेशा HTTP प्रोटोकॉल का उपयोग करने का कोई तरीका है?

मुझे पता है कि यह पूर्ण लिंक (http://www.mysite.com/index.html या https://www.mysite.com/index.html) का उपयोग करना आसान है, लेकिन मैं इसे सापेक्ष लिंक (index.html, ../index.html, आदि) के साथ काम करना चाहता हूं।

उत्तर

10

हम अपाचे mod_rewrite का उपयोग यह नियंत्रित करने के लिए करते हैं कि कोई पृष्ठ http या https के माध्यम से कार्य किया जाता है या नहीं।

# Redirect most reqests for https to http 
RewriteRule ^https://www.example.com(.*) http://www.example.com$1 [R=301,NC] 

# Allow some URIs to be https if requested 
RewriteCond %{SERVER_PORT} ^443$ 
RewriteCond %{REQUEST_URI} !^/images/(.*)$ 
RewriteCond %{REQUEST_URI} !^/scripts/(.*)$ 
RewriteCond %{REQUEST_URI} !^/styles/(.*)$ 
RewriteCond %{REQUEST_URI} !^/store(.*)$ 
RewriteCond %{REQUEST_URI} !^/login.htm$ 
RewriteRule ^(.*) http://www.example.com/$1 [L,R] 

# Force some URIs to be https only 
RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^store(.*) https://www.example.com/store$1 [L,R] 

RewriteCond %{SERVER_PORT} ^80$ 
RewriteRule ^FormSanityKey.htm https://www.example.com/login$1 [L,R] 

पर यह सब के बारे में पढ़ें: यहाँ एक साइट की मूल निर्देशिका .htaccess फाइल से एक उदाहरण का टुकड़ा है

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

+0

+1, मुझे स्पेसशिप अर्थ में समाचार लड़के की याद दिला दी :) – Niloct

2

ऐसा लगता है कि आप the BASE element का उपयोग करना चाहते हैं।

उस पृष्ठ के सिर में कम से कम आधार तत्व का उपयोग किए बिना, एक विशिष्ट प्रोटोकॉल का उपयोग करने के लिए एंकर को 'बताना' करने का कोई तरीका नहीं है।

क्या कोई कारण है कि आप पूर्ण लिंक पर सापेक्ष लिंक का उपयोग क्यों करना चाहते हैं? This article HTTPS के साथ सापेक्ष लिंक का उपयोग करने के पतन के बारे में बात करता है - आपकी साइट को डबल अनुक्रमित करने की संभावना है।

+2

धन्यवाद। मूल तत्व पृष्ठ पर सभी लिंक को प्रभावित करेगा और एक ही पृष्ठ (http और https) पर दोनों प्रकार होंगे। मैं रिश्तेदार लिंक भी पसंद करता हूं क्योंकि यह धीमी इंटरनेट कनेक्शन पर जीवन (परीक्षण, आदि ...) बनाता है और बहुत आसान है और मैं सर्वर पर फ़ोल्डर्स में साइट्स का परीक्षण कर सकता हूं। – jeroen

+1

आपकी साइट का डबल इंडेक्सिंग? क्या यह इंडेक्सिंग मशीन की समस्या नहीं है? पसंद है - क्या वे समान सामग्री के लिए फाइलों की जांच नहीं करते हैं?मैं वेबमास्टर्स के लिए "नियम" बनाने का समर्थन नहीं करता हूं, इस पर आधारित है कि खोज इंजन समय पर किसी विशेष बिंदु पर कितना गलत काम करते हैं (जो कि उनके भविष्य के व्यवहार से अलग हो सकता है)। –

4

सुनिश्चित नहीं हैं कि अगर यह आप के लिए वास्तव में क्या देख रहे थे, लेकिन आप अपाचे उपयोग कर रहे हैं है, वहाँ एक चाल यदि आप ऐसा करने का उपयोग कर सकते है: http://httpd.apache.org/docs/2.2/ssl/ssl_faq.html#relative

मूल रूप से आप अपने अपाचे विन्यास फाइल में निम्नलिखित डाल:

RewriteEngine on 
RewriteRule ^/(.*):SSL$ https://%{SERVER_NAME}/$1 [R,L] 
RewriteRule ^/(.*):NOSSL$ http://%{SERVER_NAME}/$1 [R,L] 

तो है जिसके लिए आप नियमित HTTP बाध्य करना चाहते हैं किसी भी लिंक करने के लिए किसी भी लिंक (वेबपेज में) जिसके लिए आप HTTPS को बलपूर्वक लागू करना चाहते हैं :SSL, और :NOSSL जोड़ देते हैं।

+0

अच्छा, धन्यवाद, मुझे लगता है कि मैं इसे आज़मा दूंगा। – jeroen

2

रिश्तेदार हाइपरलिंक्स के साथ ऐसा करने का कोई तरीका नहीं है क्योंकि आप एक अलग प्रोटोकॉल का उपयोग कर रहे हैं, यह एक FTP स्थान से जोड़ने से अलग नहीं होगा।

+1

यह यूआरएल/यूआरआई वाक्यविन्यास की बस एक छोटी सी बात है। मैं आसानी से ऐसी दुनिया की कल्पना कर सकता हूं जहां आप रिश्तेदार पथ के साथ एक लिंक प्राप्त कर सकते हैं, लेकिन पूर्ण प्रोटोकॉल (जैसे "बाकी रखें, पथ और प्रोटोकॉल बदलें"), जैसा कि हमारे पास प्रोटोकॉल रिश्तेदार लिंक हैं ("प्रोटोकॉल रखें, सबकुछ बदलें बाद में आता है")। हम बस इस दुनिया में नहीं रहना है। वाक्यांश के लिए –

27

आप अपने सभी आंतरिक लिंक निम्न सिंटैक्स का उपयोग करके प्रोटोकॉल स्वतंत्र हो कर सकते हैं :

<a href="//some/file/on/your/domain.php">link text</a>

बजाय

+०१२३५१६४१०६

<a href="some/file/on/your/domain.php">link text</a>

// लिंक सम्मान जो कुछ प्रोटोकॉल पृष्ठ पर लोड किया गया था कर देगा।

+1

आपके उत्तर के लिए धन्यवाद। मैंने इसे आजमाया नहीं है, लेकिन सामान्य, रिश्तेदार लिंक हमेशा उस प्रोटोकॉल का पालन करते हैं जिस पर मूल पृष्ठ लोड हो गया था, इसलिए यह कुछ भी नहीं बदलेगा। इसके अलावा मैं http - https पर https और दूसरों को लोड करने के लिए विशिष्ट - सापेक्ष - पृष्ठ और निर्देशिका चाहता हूं। – jeroen

+0

क्षमा करें, मैंने आपके प्रश्न को गलत तरीके से पढ़ा है। मैं अभी वापस गया हूं और इसे पढ़ा है और यह वास्तव में लागू नहीं होता है। – Matthew

+4

दो स्लैश के साथ एक यूआरआई शुरू करना एक "नेटवर्क-पथ संदर्भ" है और मैट वर्णित ** के रूप में कार्य करता है जब तक आप एक डोमेन निर्दिष्ट करते हैं **। आप स्थानीय फाइलों के लिए इस वाक्यविन्यास का उपयोग नहीं कर सकते क्योंकि उदाहरण इंगित करता है (ब्राउज़र "कुछ" को हल करने का प्रयास करेगा जैसे कि यह एक डोमेन था)। देखें [यूआरआई दो स्लैश से शुरू हो रहा है ... वे कैसे व्यवहार करते हैं?] (Http://stackoverflow.com/questions/4071117/uri-starting-with-two-slashes-how-do-they-behave) – Rudi

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