apache htaccess https:// www पर रीडायरेक्ट करें




.htaccess mod-rewrite (8)

पहले एचटीटीपीएस को मजबूर करने के लिए, आपको सही पर्यावरण चर %{HTTPS} off , लेकिन उपरोक्त आपका नियम www. बढ़ाता है www. चूंकि आपके पास www. को लागू करने का दूसरा नियम है www. , इसे पहले नियम में प्रयोग न करें।

RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

प्रॉक्सिंग के बारे में

प्रॉक्सीइंग के कुछ रूपों के पीछे, जिससे ग्राहक एचटीटीपीएस के माध्यम से प्रॉक्सी, लोड बैलेंसर, पैसेंजर एप्लिकेशन इत्यादि से कनेक्ट हो रहा है, %{HTTPS} चर कभी भी on नहीं हो सकता on और फिर से लिखने वाला लूप का कारण बन सकता है। ऐसा इसलिए है क्योंकि आपका एप्लिकेशन वास्तव में सादा HTTP ट्रैफ़िक प्राप्त कर रहा है भले ही क्लाइंट और प्रॉक्सी / लोड बैलेंसर HTTPS का उपयोग कर रहे हों। इन मामलों में, %{HTTPS} चर के बजाय X-Forwarded-Proto हेडर देखें। यह उत्तर उपयुक्त प्रक्रिया दिखाता है

मेरे पास निम्न htaccess कोड है:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>

मैं चाहता हूं कि मेरी साइट को https://www. रीडायरेक्ट किया जाए https://www. एचटीटीपीएस के साथ, और www. को लागू करना www. सबडोमेन, लेकिन जब मैं http://www. तक http://www. हूं http://www. (HTTPS के बिना), यह मुझे एचटीटीपीएस के साथ https://www रीडायरेक्ट नहीं करता है।


Michals जवाब मेरे लिए काम किया, यद्यपि एक छोटे से संशोधन के साथ:

मुसीबत:

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

उपाय

पहले www पर रीडायरेक्ट का उपयोग करें (या जो भी डोमेन आपके प्रमाणपत्र द्वारा कवर किया गया है) और केवल तब https पुनर्निर्देशन करें। यह सुनिश्चित करेगा कि आपके उपयोगकर्ताओं को किसी भी त्रुटि से सामना नहीं किया जा रहा है क्योंकि आपका ब्राउज़र एक प्रमाणपत्र देखता है जो वर्तमान यूआरएल को कवर नहीं करता है।

#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

प्रॉक्सी के लिए यह सबसे अच्छा तरीका है और प्रॉक्सी उपयोगकर्ताओं नहीं

RewriteEngine On

### START WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### END WWW & HTTPS

Http: // या https: // को https: // www पर रीडायरेक्ट करने के लिए आप अपाचे के सभी संस्करणों पर निम्न नियम का उपयोग कर सकते हैं:

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

अपाचे 2.4

RewriteEngine on

RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

ध्यान दें कि% {REQUEST_SCHEME} चर अपाचे 2.4 के बाद उपयोग के लिए उपलब्ध है।


वहां बहुत सारे समाधान हैं। यहां अपाचे विकी का एक लिंक है जो इस मुद्दे से सीधे संबंधित है।

http://wiki.apache.org/httpd/RewriteHTTPToHTTPS

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context

अपनी .htaccess फ़ाइल में सेट करें

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

खराब समाधान और क्यों!

जब आप इस कोड का उपयोग करते हैं:

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]

ब्राउज़र जाता है:

http://example.com

फिर रीडायरेक्ट करता है:

https://example.com

फिर रीडायरेक्ट करता है:

https://www.example.com

यह सर्वर के लिए बहुत अधिक अनुरोध है

सर्वोत्तम समाधान और उत्तर:

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]

यूआरएल में दोहरी परिवर्तनों को रोकने के लिए इस कोड में [OR] स्थिति है!


यह https और www दोनों के लिए काम करेगा

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]




https