.htaccess को http से https में पुनर्निर्देशित करें


86

मेरे पास एक पुराना url ( www1.test.net) है और मैं इसे https://www1.test.net
अपनी साइट पर अपने SSL प्रमाणपत्र को लागू करने और स्थापित करने के लिए पुनर्निर्देशित करना चाहूंगा ।
यह मेरी पुरानी फ़ाइल है .htaccess:

RewriteEngine On
RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

मैं अपनी .htaccessफ़ाइल को कैसे कॉन्फ़िगर कर सकता हूं ताकि url ऑटो पुनर्निर्देशित हो https?
धन्यवाद!


यदि दूसरी पंक्ति का उद्देश्य पुनर्निर्देशित नहीं करना है यदि पथ एक वास्तविक फ़ाइल को इंगित करता है (और आप अपेक्षित संभावित एक्सटेंशन सूचीबद्ध कर रहे हैं), तो आप इसे मौजूदा फ़ाइल के लिए चेक के साथ बदलकर और अधिक लचीला बना सकते हैं: RewriteCond %{REQUEST_FILENAME} !-f इसके बाद आपका पुनर्निर्देश।
हीरे

जवाबों:


117

अपडेट २०१६

जैसा कि इस उत्तर में कुछ ध्यान दिया गया है, मैं वर्चुअल होस्ट का उपयोग करके इसे करने के लिए अधिक अनुशंसित तरीके से संकेत देना चाहता हूं: Apache: Redirect SSL

<VirtualHost *:80>
   ServerName mysite.example.com
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
   DocumentRoot /usr/local/apache2/htdocs
   SSLEngine On
# etc...
</VirtualHost>

पुराना उत्तर, हैक की गई चीज़ जो आपके ssl-port को 80 पर सेट नहीं है, यह काम करेगा:

RewriteEngine on

# force ssl
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

ध्यान दें कि यह आपका पहला पुनर्लेखन नियम होना चाहिए।

संपादित करें: यह कोड निम्न कार्य करता है। RewriteCond (ition) अनुरोध के ServerPort को जाँचाता है जो 80 है (जो कि डिफ़ॉल्ट http-port है, यदि आपने दूसरा पोर्ट निर्दिष्ट किया है, तो आपको इसके लिए स्थिति को समायोजित करना होगा)। यदि हां, तो हम पूरे url से मेल खाते हैं (.*)और इसे https-url पर रीडायरेक्ट करते हैं। %{SERVER_NAME}एक विशिष्ट url के साथ प्रतिस्थापित किया जा सकता है, लेकिन इस तरह से आपको अन्य परियोजनाओं के लिए कोड को बदलने की आवश्यकता नहीं है। %{REQUEST_URI}TLD (टॉप-लेवल-डोमेन) के बाद url का हिस्सा है, इसलिए आप जहाँ से आए हैं, वहाँ पर पुनः निर्देशित किया जाएगा, लेकिन https के रूप में।


1
धन्यवाद धन्यवाद ... यह काम करता है ...: D लेकिन, क्या आप बता सकते हैं कि यह क्यों काम करता है? ... धन्यवाद ... ^
Bàn Ch Novn Tr'n

1
खुशी है कि यह आपके लिए कारगर रहा। कोड पर स्पष्टीकरण के लिए अद्यतन उत्तर की जाँच करें। क्या यह आपके लिए पर्याप्त है?
Jojo

1
"ध्यान दें कि यह आपका पहला पुनर्लेखन नियम होना चाहिए।" @ जोजो ने मेरे जीवन को बचाया: *
इवान शुलेव

1
स्पष्टीकरण में जोड़ने के लिए। "[[L] ध्वज] ( httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l ) नियम सेट को संसाधित करने से रोकने के लिए mod_rewrite का कारण बनता है।" आमतौर पर आप इसे डिफ़ॉल्ट रूप से जोड़ना चाहते हैं। "[[R] ध्वज] ( httpd.apache.org/docs/2.4/rewrite/flags.html#flag_r ) का उपयोग करने से ब्राउज़र को HTTP अनुप्रेषित जारी किया जा सकता है।" यदि अनुपस्थित है, तो पुनर्निर्देशन आंतरिक होगा जो HTTPS के उपयोग के अर्थ को शून्य कर देगा। डिफ़ॉल्ट रूप से, जारी किया गया पुनर्निर्देशन 302 (अस्थायी पुनर्निर्देशन) की स्थिति के साथ है। यदि आप चाहते हैं कि ब्राउज़र ("स्थायी रूप से") नए URL को कैश करें, [R=301]इसके बजाय उपयोग करें ।
जानिस एल्मेरिस

1
VirtualHost समाधान के लिए, यह स्पष्ट नहीं है कि जटिल सेटअप के मामले में "रीडायरेक्ट स्थायी" कथन कहां रखा जाना चाहिए। मैंने शीर्ष के पास ग्रहण किया, और यह काम किया।
eyal_katz

178

मैं अपने डोमेन के सभी पृष्ठों को http से https तक सफलतापूर्वक पुनर्निर्देशित करने के लिए निम्नलिखित का उपयोग करता हूं:

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

ध्यान दें कि यह रीडायरेक्ट का उपयोग करके 301 'permanently moved'पुनर्निर्देशित करेगा, जो आपकी एसईओ रैंकिंग को स्थानांतरित करने में मदद करेगा।

302 'temporarily moved'परिवर्तन का उपयोग कर पुनर्निर्देशित करना[R=302,L]


5
यह "
हैकी

7
कुछ मामलों में एक्स- RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
फ़ॉर्वर्ड

1
अब तक यहाँ बेहतर जवाब
स्वागत किया

यह मेरे लिए Godaddy सर्वर में काम किया है। @ ब्रैडली ग्रेट !!
विष्णु

इसने विभिन्न प्रकार के सर्वर वातावरण और साइट सेटअप के तहत मेरे लिए हर बार काम किया है। अनुशंसित उत्तर IMHO होना चाहिए।
जॉन कॉन्टारिनो

60

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

RewriteEngine On

### 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]

### WWW & HTTPS

1
गैर-www पर पुनर्निर्देशित कैसे करें?
एलोर

यह उन लोगों के लिए अब तक का सबसे अच्छा जवाब है जहां %{HTTPS} offपर्याप्त नहीं है
NoodleOfDeath

10

मैं निम्नलिखित कोड के साथ https को मजबूर करता हूं:

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

1
@ मेरे जवाब की तारीख की जांच करें और "जो पहले से ही वहां है" कृपया।
अर्धा

6

ऐसे मामलों में जहां लोड बैलेंसर पर HTTPS / SSL कनेक्शन समाप्त हो जाता है और सभी ट्रैफिक को पोर्ट 80 पर इंस्टेंस पर भेजा जाता है, निम्नलिखित नियम गैर-सुरक्षित ट्रैफ़िक को रीडायरेक्ट करने का काम करता है।

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

सुनिश्चित करें कि mod_rewriteमॉड्यूल लोड है।


4

पुनर्निर्देशित करने के सर्वोत्तम तरीके की खोज, मुझे यह मिल गया है (html5boilerplate से आ रहा है):

# ----------------------------------------------------------------------
# | HTTP Strict Transport Security (HSTS)                              |
# ----------------------------------------------------------------------

# Force client-side SSL redirection.
#
# If a user types `example.com` in their browser, even if the server
# redirects them to the secure version of the website, that still leaves
# a window of opportunity (the initial HTTP connection) for an attacker
# to downgrade or redirect the request.
#
# The following header ensures that browser will ONLY connect to your
# server via HTTPS, regardless of what the users type in the browser's
# address bar.
#
# (!) Remove the `includeSubDomains` optional directive if the website's
# subdomains are not using HTTPS.
#
# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
# https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1
# http://blogs.msdn.com/b/ieinternals/archive/2014/08/18/hsts-strict-transport-security-attacks-mitigations-deployment-https.aspx

Header set Strict-Transport-Security "max-age=16070400; includeSubDomains"

शायद यह 2017 में किसी की मदद करेगा! :)


2017 में, यह स्वीकृत उत्तर होना चाहिए। लेकिन इसमें यह होना चाहिए कि HSTS को .htacces फ़ाइल (इस के साथ टैग किया गया है) को सक्षम करने के लिए आपको IfModule टैग को छोड़ना होगा। यदि आप अपना उत्तर इस प्रकार देते हैं कि मैं सहर्ष स्वीकार किए गए उत्तर के साथ यहाँ से
जोजो

नमस्ते जोजो! इस देर से जवाब के लिए खेद है, आप दोनों # <IfModule mod_headers.c>और # </IfModule>लाइनों को हटाने का मतलब है ?
LIIT

हे LIIT, हाँ यही मेरा मतलब है।
जोजो

1
हालांकि यह अच्छा है और वांछित प्रभाव को (शायद) प्राप्त करने या समर्थन करने में मदद करता है, लेकिन यह http अनुरोधों को https में पुनर्निर्देशित नहीं करता है , और इस तरह, सवाल का जवाब नहीं देता है। यह केवल तभी काम करता है जब ग्राहक पहले से ही HTTPS (अधिकतम-आयु अंतराल के भीतर निर्दिष्ट) के माध्यम से साइट तक पहुंच गया हो। तो यह हमेशा एक उचित पुनर्निर्देशन के साथ होना चाहिए।
निकोलाई एहमैन

4

इस कोड को अपनी .htaccess फ़ाइल में डालें। और यह काम करना चाहिए

RewriteCond %{HTTP_HOST} yourDomainName\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourDomainName.com/$1 [R,L]

3

इस कोड को अपनी .htaccess फ़ाइल के अंत में जोड़ें

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

1
शायद क्योंकि mod_rewrite इस उत्तर में सक्षम नहीं है क्योंकि यह दूसरों में है।
केजी

बस RewriteEngine onइसके ऊपर से जोड़ देने से काम हो जाएगा।
Giacomo1968

2

.Htaccess के शीर्ष पर निम्नलिखित जोड़ना

RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

2

यह सुनिश्चित करता है कि पुनर्निरीक्षण, समवर्ती प्रॉक्सिज़ के सभी संयोजनों के लिए काम करता है।

इसमें केस क्लाइंट <http> प्रॉक्सी <https> वेबसर्वर शामिल है

# behind proxy
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^http$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

# plain
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^$
RewriteCond %{REQUEST_SCHEME} ^http$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

1

मुझे पुनर्निर्देशन में भी समस्या थी। मैंने वह सब कुछ करने की कोशिश की जो स्टैकओवरफ्लो पर प्रस्तावित था। मेरे द्वारा पाया गया एक मामला है:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

-1

.htaccessफ़ाइल के साथ HTTPS के लिए मजबूर करना

==> सभी वेब ट्रैफ़िक पुनर्निर्देशित: -

HTTPS का उपयोग करने के लिए सभी वेब ट्रैफ़िक को बाध्य करने के लिए, .htaccessअपनी वेबसाइट के रूट फ़ोल्डर में फ़ाइल में कोड की निम्न पंक्तियाँ डालें ।

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

==> केवल पुनर्निर्देशित निर्दिष्ट डोमेन: -

HTTPS का उपयोग करने के लिए एक विशिष्ट डोमेन को बाध्य करने के लिए, .htaccessअपनी वेबसाइट के रूट फ़ोल्डर में फ़ाइल में कोड की निम्न पंक्तियों का उपयोग करें:

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

यदि यह काम नहीं करता है, तो पहले दो पंक्तियों को हटाने का प्रयास करें।

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

उदाहरण के लिए प्रतिस्थापित करना सुनिश्चित करें। इसके अतिरिक्त, आपको अपने वास्तविक डोमेन नाम के साथ www.example.com को बदलना होगा।

==> रीडायरेक्ट निर्दिष्ट फ़ोल्डर: -

यदि आप किसी विशिष्ट फ़ोल्डर में SSL को बाध्य करना चाहते हैं, तो .htaccessउस विशिष्ट फ़ोल्डर में रखी गई फ़ाइल में नीचे कोड डालें :

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://www.example.com/folder/$1 [R=301,L]

सुनिश्चित करें कि आप फ़ोल्डर के संदर्भ को वास्तविक फ़ोल्डर नाम में बदलते हैं। फिर अपने वास्तविक डोमेन नाम और उस फ़ोल्डर के साथ www.example.com/folder को बदलना सुनिश्चित करें जिसे आप एसएसएल को मजबूर करना चाहते हैं।


-1

अपना डोमेन बदलें domainname.com, यह मेरे साथ काम कर रहा है।

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

2
कृपया केवल कोड को उत्तर के रूप में पोस्ट न करें, बल्कि यह भी बताएं कि आपका कोड क्या करता है और यह कैसे प्रश्न की समस्या को हल करता है। एक स्पष्टीकरण के साथ उत्तर आमतौर पर अधिक सहायक और बेहतर गुणवत्ता के होते हैं, और upvotes को आकर्षित करने की अधिक संभावना होती है।
मार्क रोटटेवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.