2009-08-25 17 views
23

के साथ फोर्स एसएसएल/एचटीटीपीएस मेरे पास एक ज़ेंड फ्रेमवर्क एप्लिकेशन है जिसे मैं mod_rewrite का उपयोग करके HTTPS में मजबूर करना चाहता हूं। Mod_rewrite की बात आती है जब मैं बहुत खो गया हूँ। मेरे आवेदन की जड़ में मेरी वर्तमान। Htaccess फ़ाइल है।mod_rewrite

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule !\.(html|htm|php|js|ico|gif|jpg|png|css|csv)$ /subdir/index.php 

मेरे पास जो कुछ है उसके आधार पर एप्लिकेशन को एचटीटीपीएस में मजबूर करने का सबसे अच्छा तरीका क्या है? मैंने यहां कुछ उदाहरणों को आजमाया है, लेकिन जब मैं उन्हें कोशिश करता हूं तो मुझे रीडायरेक्ट लूप या आंतरिक सर्वर त्रुटियां मिलती रहती हैं।

आपकी मदद के लिए धन्यवाद!

+0

प्रश्न ज़ेंड फ्रेमवर्क के साथ कुछ लेना देना नहीं है। जब आप Google पर ज़ेंड समाधान खोजते हैं तो बहुत गुमराह होता है। इसका नाम बदलना चाहिए "अभी तक एक और mod_rewrite सवाल" – DanFromGermany

उत्तर

2

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^.*$ https://mydomain.com/\0 [L,QSA,R=301] 
36

अपने मौजूदा नियमों से पहले इस नियम रखो:

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

यहां ध्यान देने योग्य बिंदु "इस नियम को अपने वर्तमान नियमों से पहले रखें"। इसे पहले नियम के रूप में बनाएं। मेरी साइट पर कई रीडायरेक्ट नियम थे और इस नियम को पहली बार चाल के रूप में बनाया गया था। क्लाउडफ्लेयर लचीला एसएसएल का उपयोग करते समय –

5

मैं भी इस समाधान के लिए देख रहा था। मैंने गम्बो के समाधान जोड़े और यह मेरे लिए बहुत अच्छा काम किया। लेकिन मेरा मूल अलग था। मेरी साइट/ऐप फिर से लिखने वाली फाइलों को छोड़कर index.php (फैन यूआरएल और ../application के लिए) के माध्यम से सबकुछ रीडायरेक्ट करता है। (सार्वजनिक रूट में एक छवि या अन्य स्थैतिक फाइलों की तरह) यहां मेरा मूल है, जिसे मैंने बहुत समय पहले जेडएफ साइट से पाया था।

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 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 
24

Gumbo के समाधान आपके औसत Apache वेब सर्वर के लिए ठीक काम करता है, वहीं मैं प्रॉक्सी (जैसे CloudFlare'd साइटों या OpenShift) के पीछे सर्वर पर छोरों अनुप्रेषित का अनुभव किया। निम्नलिखित समाधान दोनों प्रॉक्सी और असम्पीडित सर्वरों के लिए अच्छी तरह से काम करता है:

RewriteEngine On 

# If we receive a forwarded http request from a proxy... 
RewriteCond %{HTTP:X-Forwarded-Proto} =http [OR] 

# ...or just a plain old http request directly from the client 
RewriteCond %{HTTP:X-Forwarded-Proto} ="" 
RewriteCond %{HTTPS} !=on 

# Redirect to https version 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# Put the rest of your rewrite rules here 
+4

इस उत्तर के लिए डिफ़ॉल्ट +1; अन्य सभी समाधान रीडायरेक्ट लूप बनाने के लिए प्रतीत होते हैं – BellamyStudio

+0

एक वर्डप्रेस साइट पर काम किया जहां केवल होम पेज https को मजबूर कर रहा था जबकि अन्य पृष्ठों के लिए http की अनुमति थी। नोट: मुझे यह कोड काम करने के लिए। Htaccess में '# BEGIN वर्डप्रेस' से पहले इस कोड को रखना था। – nikhilvj

+1

हेरोोकू के लिए इसका इस्तेमाल किया गया। ठंडा! –