2009-09-25 15 views
33

के साथ www को गैर-www पर रीडायरेक्ट करता है। मेरे पास एक ही .htaccess फ़ाइल के तहत संचालित कई डोमेन हैं, प्रत्येक एसएसएल के माध्यम से सुरक्षित है। गैर-www के लिए www के रीडायरेक्ट को सुनिश्चित करते हुए मुझे हर डोमेन पर https को मजबूर करने की आवश्यकता है। यहाँ मैं क्या उपयोग कर रहा हूँ जो काम नहीं करता है:.htaccess एसएसएल/एचटीटीपीएस

RewriteCond %{HTTP_HOST} ^www.%{HTTP_HOST} 
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI}/$1 [R=301,L] 

उदाहरण:

https://www.strategice.com 

पहले से रीडायरेक्ट करना चाहिए ...

https://strategice.com 

धन्यवाद!

+2

मार्क एक सही जवाब पहले से ही! –

उत्तर

16

आपकी स्थिति कभी भी सच नहीं होगी, क्योंकि इसकी तरह "अगर (ए == ए + बी)" है।

मैं निम्नलिखित की कोशिश करता हूँ: $ 1 में और उस के संयोजन 2 के बाद

RewriteCond %{HTTP_HOST} ^www\.(.*) 
RewriteRule ^.*$ https://%1/$1 [R=301,L] 

यह% 1 में "www.google.com" से "google.com" पर कब्जा, आराम, जब Http_HOST www के साथ शुरू होता है (https के साथ या बिना)।

+0

दुर्भाग्य से यह अभी भी "कनेक्शन अविश्वसनीय" त्रुटि बनाता है जब कोई https://www.domain.com – aegenes

+0

हम्म तक पहुंचने का प्रयास करता है लेकिन यह ठीक से रीडायरेक्ट कर रहा है? यदि यह एक प्रमाण पत्र मुद्दा हो सकता है। प्रमाण पत्र मुद्दे के लिए – Fabian

+2

[यह] (http://stackoverflow.com/a/10726167/372643) देखें। – Bruno

2

यह मेरे लिए काम किया:

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

प्रमाणपत्र www और गैर- www https कवर करना होगा। कुछ प्रदाता के कर्ट www.xxxx.yyy दोनों के लिए कवर करते हैं, लेकिन xxxx.yyy के लिए केवल एक ही है।

पुनर्लेखन चालू:

RewriteCond %{SERVER_PORT} 443 
RewriteCond %{HTTP_HOST} ^www[.].+$ 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R=301] 

प्रसंस्करण नहीं किया जा सकता गैर:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R=301] 

केवल www https गैर- www https का उपयोग करें:

RewriteEngine On 

सभी http उपयोग https बनाओ -www https, अन्यथा एक लूप होता है।

में [एल, आर = 301]:

  1. एल = तो नियम संसाधित किया गया था, किसी भी अधिक की प्रक्रिया नहीं है।
  2. आर = 301 = स्थायी रीडायरेक्ट करने के लिए ब्राउज़र/रोबोट बताता है।

अधिक सामान्य

एक अधिक सामान्य दृष्टिकोण - नहीं बंदरगाह पर निर्भर - है:

RewriteCond %{HTTP_HOST} ^www\. 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

www के साथ किसी भी यूआरएल इसे छोड़ बनाने के लिए।

RewriteCond %{HTTPS} !on 
RewriteCond %{HTTPS} !1 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTP:X-Forwarded-SSL} !on 
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA] 

किसी भी गैर https यूआरएल, यहां तक ​​कि उन सिस्टम के लिए नीचे की ओर लोड बैलेंसर्स जो https ड्रॉप, https उपयोग से मजबूर करने के लिए।

ध्यान दें कि मैंने forwarded विकल्पों का परीक्षण नहीं किया है, इसलिए उनके साथ किसी भी मुद्दे पर प्रतिक्रिया की सराहना करेंगे।यदि आपकी प्रणाली लोड-बैलेंसर के पीछे नहीं है तो उन पंक्तियों को छोड़ दिया जा सकता है।

HTTP_HOST को या नहीं

आप ${HTTP_HOST} का उपयोग RewriteRule में URL के भाग हो सकता है, या आप अपने स्पष्ट विहित डोमेन नाम पाठ (xxxx.yyy ऊपर) का उपयोग कर सकते हैं।

डोमेन नाम निर्दिष्ट करना स्पष्ट रूप से सुनिश्चित करता है कि उपयोगकर्ता द्वारा आपूर्ति किए गए यूआरएल में कुछ मामूली-चरित्र चरित्र-झुकाव साधनों का उपयोग संभवतः आपकी साइट को कुछ ऐसा करने में चालित करने के लिए नहीं किया जा सकता है, या कम से कम यह सुनिश्चित करता है कि पता बार में उचित डोमेन नाम दिखाई देता है, भले ही यूआरएल स्ट्रिंग ने पृष्ठ खोला हो।

यह पता बार में उचित यूनिकोड वर्ण दिखाने के लिए punycode-encoded डोमेन को कनवर्ट करने में भी मदद कर सकता है।

+0

आकर्षण के रूप में कार्य करता है! –

+0

अविश्वसनीय काम करता है! स्पष्टीकरण के लिए धन्यवाद। –

44

https

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 

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

"रिवाइट्रूल^(। *) $ Http: //% 1/$ 1 [आर = 301, एल]" को बदल दिया गया था "रिवाइट्रूल^(। *) $ Https: //% 1/$ 1 [आर = 301, एल ] "(@ केन वेरहेजेन द्वारा) अन्यथा" यह पहले गैर-http, और उसके बाद https पर रीडायरेक्ट होगा ... इसलिए अब हम संभावित रूप से ट्रिगर किए गए दूसरे रीडायरेक्ट से बच सकते हैं। " – alexbt

1
RewriteEngine On 

RewriteCond %{HTTP_HOST} ^www\.(.*) 
RewriteRule ^.*$ https://%1/$1 [R=301,L] 

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

यह बहुत परीक्षण और त्रुटि के बाद मेरे लिए काम किया साथ गैर www को www। भाग एक के ऊपर उपयोगकर्ता से है और www.xxx.yyy पर कब्जा करने के लिए और https://xxx.yyy

भाग 2 से URL दर्ज और चेक पर लग रहा है HTTPS, अगर नहीं, यह HTTPS

इस क्रम में हो गया करने के लिए भेजता है, तो भेज देंगे, यह तर्क का पालन करता है और कोई त्रुटि नहीं होती है।

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

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


# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 
2

गैर- www और https एक अनुरोध में लागू करने के लिए आपको अपने htaccess में निम्नलिखित नियम का उपयोग कर सकते हैं::

यहाँ वर्डप्रेस के साथ कंधे htaccess में मेरा पूर्ण संस्करण है

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\. [OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ 
RewriteRule^https://%1%{REQUEST_URI} [NE,L,R] 

यह http://www.example.com/ या https://www.example.com/ पुनर्निर्देश एसएसएल गैर-www https://example.com/ पर।

मैं आर परीक्षण उद्देश्य के लिए टेम्प्र रीडायरेक्ट ध्वज और ब्राउज़र कैशिंग से बचने के लिए उपयोग कर रहा हूं। यदि आप रीडायरेक्ट को स्थायी बनाना चाहते हैं, तो बस R ध्वज R = 301 पर बदलें।

+0

हम्म लेकिन फिर भी जब मैं www सफारी के साथ साइट दर्ज करता हूं तो कहता है कि पृष्ठ असुरक्षित है और ओपेरा www के साथ या बिना किसी विकल्प के रीडायरेक्ट करना चाहता है, क्यों? –

1

रेफरी: Apache redirect www to non-www and HTTP to HTTPS

http://example.com

http://www.example.com

https://www.example.com

https://example.com

को
RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [L,NE,R=301] 

बजाय अगर example.com आप सामान्य URL www.example.com होना चाहते हैं, तो बस तीसरे और पांचवें लाइनों को बदलने:

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