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




.htaccess mod-rewrite (7)

मेरे पास निम्न 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]

अपनी .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]

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

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

यदि आप क्लाउडफ्लारे पर हैं, तो सुनिश्चित करें कि आप इस तरह कुछ उपयोग करते हैं।

# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect

यह आपको रीडायरेक्ट लूप से बचाएगा और आपकी साइट को सुरक्षित रूप से SSL पर रीडायरेक्ट करेगा।

PS mod_rewrite.c की जांच करना एक अच्छा विचार है!


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

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

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

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

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

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

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