2011-02-08 18 views
5

जब मैं HTTP पृष्ठों से एचटीटीपीएस पृष्ठों (केवल विशिष्ट पृष्ठों के लिए) पर रीडायरेक्ट के लिए नियम बनाने का प्रयास करता हूं, तो .htaccess के साथ, मुझे लूप रीडायरेक्ट प्राप्त हुआ है। मैं कहाँ गलत हूँ?http से https पृष्ठ पर स्थायी रीडायरेक्ट

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^(/doctor) [NC, OR] 
RewriteCond %{REQUEST_URI} ^(/client) 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^(/doctor) [NC, OR] 
RewriteCond %{REQUEST_URI} !^(/client) 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L] 

उत्तर

4

मैं अपने सवाल का जवाब मिल गया है:

Kazar के जवाब देने के लिए
Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^(/(client/|doctor/)) 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^(/(client/|doctor/)) 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 
15

आप अगर सर्वर पोर्ट इस्तेमाल कर सकते हैं

RewriteEngine on 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteCond %{REQUEST_URI} ^/doctor/?.*$ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L] 

चेक पूरी साइट उपयोग

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

विशिष्ट पृष्ठों के लिए के लिए

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} somefolder 
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L] 

का प्रयोग कर एक विशेष फ़ोल्डर के लिए https मजबूर करने के लिए 443 से अलग है (मानक सुरक्षित कनेक्शन के लिए), यह सुनिश्चित करने के लिए कि हम केवल गैर-सुरक्षित कनेक्शन रीडायरेक्ट करने जा रहे हैं

डोमेन सुरक्षित करने के लिए पृष्ठ safe.php को रीडायरेक्ट करें, 301 प्रतिक्रिया स्थिति भेजना, सभी क्वेरी स्ट्रिंग और अंकन को जोड़ना अंतिम नियम है, इसलिए कोई नियम नीचे इस पार्स नहीं किया जाएगा

यहाँ मैंने पाया here

<?php 

//assuming you site structure like www.domain.com/p=doctor 

    $redirectlist = array('doctor','nurse','anyother'); 

    if (in_array($_GET['p'], $redirectlist) && strtolower($_SERVER['HTTPS']) != 'on') { 
     exit(header("location: https://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}")); 
    } 

?> 
+0

मुझे लगता है, लेकिन मुझे समस्या है जब मैं सभी पृष्ठों को दिखाना चाहता हूं, जो https/डॉक्टर और क्लाइंट के बिना क्लाइंट के अंतर्गत स्थित नहीं हैं। – misho

+1

SERVER_PORT चर का उपयोग न करें, इसके बजाय HTTPS का उपयोग करें, इस तरह यदि सुनना बंदरगाह बदलता है (या आप एकाधिक बंदरगाहों पर सुनते हैं), तो रीडायरेक्ट अभी भी काम करता है। – Kazar

+0

@kazar: अच्छा बिंदु। – ayush

2

इस प्रयास करें .htaccess का उपयोग किए बिना एक समाधान है (के बाद से इस अनुप्रेषित है, हम किसी भी अन्य कार्य करने के लिए नहीं करना चाहते हैं):

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{HTTPS} !on 
RewriteCond %{REQUEST_URI} ^/doctor/?.*$ 
RewriteCond %{REQUEST_URI} ^/client/?.*$ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

यदि https चालू नहीं है, और आप/डॉक्टर या/ग्राहक (या उन दोनों के किसी भी उप-फ़ोल्डर) तक पहुंच रहे हैं, तो इसे HTTPS पर अग्रेषित करना चाहिए।

+0

दुर्भाग्य से, यह काम नहीं करता है। – misho

+0

यह किस तरह से काम नहीं करता है? क्या आप इस एकल सेट के साथ अपने दो सेट्स को पुनः लिखने वाले स्थान बदल रहे हैं? – Kazar

+0

यह बिल्कुल काम नहीं करता है। मैंने इस पाठ को मेरी .htaccess में कॉपी किया है, लेकिन मैंने https पृष्ठों पर रीडायरेक्ट नहीं किया है। – misho

1

ही तरह, लेकिन अधिक संक्षिप्त।

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{HTTPS} !on 
RewriteRule !/(doctor|client)(/.*)?$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

यह अधिक संक्षिप्त है, लेकिन यदि आपको कभी भी HTTPS पर बल देने के लिए नए पेज जोड़ने की आवश्यकता है, तो आपको रीवेटकंड जोड़ने के बजाय उस रेगेक्स को संशोधित करना होगा। आपको 20 या इतने सुरक्षित पृष्ठ मिलना शुरू हो जाता है और वह रेगेक्स बहुत लंबा हो जाएगा। – Kazar

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