मैं अपनी साइट (जैसे http://www.example.com
) पर सभी असुरक्षित HTTP अनुरोधों को HTTPS ( https://www.example.com
) में पुनर्निर्देशित करना चाह रहा हूं । मैं PHP btw का उपयोग कर रहा हूँ। क्या मैं ऐसा कर सकता हूं।
http://
मैं अपनी साइट (जैसे http://www.example.com
) पर सभी असुरक्षित HTTP अनुरोधों को HTTPS ( https://www.example.com
) में पुनर्निर्देशित करना चाह रहा हूं । मैं PHP btw का उपयोग कर रहा हूँ। क्या मैं ऐसा कर सकता हूं।
http://
जवाबों:
अद्यतन: हालांकि इस जवाब को कुछ साल पहले स्वीकार किया गया है, ध्यान दें कि अपाचे प्रलेखन द्वारा इसके दृष्टिकोण की सिफारिश की गई है। Redirect
इसके बजाय प्रयोग करें । इस जवाब को देखें ।
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
http://server/foo?email=someone%40example.com
को पुनर्निर्देशित https://server/foo?email=someone%2540example.com
URL को दो बार उद्धृत किया जाता है । @ Ssc के उत्तर में विधि का उपयोग करने से यह समस्या नहीं होती है।
In the case of the http-to-https redirection, the use of RewriteRule would be appropriate if you don't have access to the main server configuration file, and are obliged to perform this task in a .htaccess file instead.
अपाचे डॉक्स एक पुनर्लेखन का उपयोग कर के खिलाफ सलाह देते हैं:
http
URL को पुनर्निर्देशित करने के लिएhttps
, निम्न कार्य करें:<VirtualHost *:80> ServerName www.example.com Redirect / https://www.example.com/ </VirtualHost> <VirtualHost *:443> ServerName www.example.com # ... SSL configuration goes here </VirtualHost>
यह स्निपेट मुख्य सर्वर विन्यास फाइल में जाना चाहिए, नहीं में .htaccess
के रूप में प्रश्न में पूछा।
यह लेख शायद सवाल पूछने और जवाब देने के बाद ही सामने आया होगा, लेकिन लगता है कि यह मौजूदा रास्ता है।
permanent
कीवर्ड का उपयोग करते हैं , तो प्रभाव समान है (ब्राउज़र को 301 रीडायरेक्ट प्राप्त होता है)। जैसे:Redirect permanent "/" "https://example.com"
मैं 301 पुनर्निर्देशन की सलाह दूंगा:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
[L]
जैसा कि मैं इस प्रश्न में कह रहा था , मेरा सुझाव है कि आप सभी HTTP अनुरोधों को उनके HTTPS के बराबर नेत्रहीन रूप से पुनर्निर्देशित करने से बचें, क्योंकि इससे आपको सुरक्षा की गलत धारणा हो सकती है। इसके बजाय, आपको शायद अपनी HTTP साइट की "रूट" को अपनी HTTPS साइट के रूट पर भेजना चाहिए और वहां से लिंक करना होगा, केवल HTTPS को।
समस्या यह है कि अगर HTTPS साइट पर कुछ लिंक या फ़ॉर्म क्लाइंट को HTTP साइट पर अनुरोध भेजते हैं, तो इसकी सामग्री पुनर्निर्देशन से पहले दिखाई देगी।
उदाहरण के लिए, यदि आपके किसी पृष्ठ को HTTPS पर सेवा दी गई है, जिसमें एक फॉर्म है जो कहता है <form action="http://example.com/doSomething">
और कुछ डेटा भेजता है जो स्पष्ट रूप से नहीं भेजे जाने चाहिए, तो ब्राउज़र पहले HTTP साइट पर पूर्ण अनुरोध (यदि यह एक POST है) सहित भेज देगा प्रथम। पुनर्निर्देशन को तुरंत ब्राउज़र में भेजा जाएगा और, चूंकि बड़ी संख्या में उपयोगकर्ता चेतावनी को अक्षम या अनदेखा करते हैं, इसलिए इसे अनदेखा करने की संभावना है।
बेशक, लिंक प्रदान करने की गलती जो HTTPS साइट के लिए होनी चाहिए, लेकिन जो HTTP साइट के लिए हो रही है, जैसे ही आपको अपने HTTPS साइट के समान IP पते पर HTTP पोर्ट पर कुछ सुनने को मिलता है, समस्याएँ पैदा हो सकती हैं। हालांकि, मुझे लगता है कि दोनों साइटों को "दर्पण" के रूप में रखने से केवल गलतियां होने की संभावना बढ़ जाती है, क्योंकि आप यह धारणा बना सकते हैं कि उपयोगकर्ता को HTTPS पर पुनर्निर्देशित करके यह स्वतः ही सही हो जाएगा, जबकि यह अक्सर बहुत देर हो चुकी होती है। ( इस सवाल में भी ऐसी ही चर्चा थी । )
मुझे पता चला कि डोमेन पर https और www के लिए सबसे अच्छा तरीका है
RewriteCond %{HTTPS} off
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
http://www.example.com/...
क्योंकि दो स्थितियाँ स्पष्ट रूप से होती हैं और होती हैं। उन्हें इसके बजाय OR'd होना चाहिए, अर्थात। OR
पहली शर्त पर ध्वज शामिल करें (और रेगेक्स में शाब्दिक डॉट्स से बचने के लिए याद रखें)। लेकिन अगर आप HSTS को लागू कर रहे हैं तो आप HTTPS और www को पुनर्निर्देशित नहीं करना चाहते हैं, आपको पहले HTTPS पर पुनर्निर्देशित करना चाहिए ।
यह html रीडायरेक्ट अप्रोच है जो काम करता है लेकिन सर्वश्रेष्ठ नहीं।
<meta http-equiv="Refresh" content="0;URL=https://www.example.com" />
PHP दृष्टिकोण
<?php
function redirectTohttps() {
if ($_SERVER['HTTPS']!="on") {
$redirect= "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
header("Location:$redirect");
}
}
?>
.htaccess लगभग
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
से कॉपी किया गया: www.letuslook.org
.htaccess
? इसके अलावा, वह लिंक मर चुका है।
मुझे http से https तक रीडायरेक्ट करने का यह तरीका पसंद है। क्योंकि मुझे इसे प्रत्येक साइट के लिए संपादित करने की आवश्यकता नहीं है।
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
अपनी .htaccess फ़ाइल में निम्न कोड का उपयोग करते हुए स्वचालित रूप से आगंतुकों को आपकी साइट के HTTPS संस्करण में पुनर्निर्देशित करता है:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
यदि आपके पास एक .htaccess फ़ाइल है:
रिवट्राइटिनाइन पर डुप्लिकेट न करें।
सुनिश्चित करें कि रेवेरिटकॉन्ड और रेव्रीट्रूअल की शुरुआत करने वाली पंक्तियाँ तुरंत पहले से मौजूद रेव्रीटेगाइन ऑन का अनुसरण करें।
यह GoDaddy.com के अनुसार .htaccess का उपयोग करके HTTP को HTTPS पर पुनर्निर्देशित करने की उचित विधि है। कोड की पहली पंक्ति आत्म-व्याख्यात्मक है। कोड की दूसरी पंक्ति यह देखने के लिए जांचती है कि क्या HTTPS बंद है, और यदि ऐसा है तो यह HTTP को HTTPS में तीसरी पंक्ति कोड चलाकर पुनर्निर्देशित करता है, अन्यथा कोड की तीसरी पंक्ति को अनदेखा कर दिया जाता है।
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
https://www.godaddy.com/help/redirect-http-to-https-automatically-8828
सबसे अच्छा समाधान आपकी आवश्यकताओं पर निर्भर करता है। यह कुछ संदर्भों के साथ पहले से पोस्ट किए गए उत्तरों का सारांश है।
यदि आप Apache वेब सर्वर के साथ काम करते हैं और इसके कॉन्फ़िगरेशन को बदल सकते हैं, तो Apache प्रलेखन का पालन करें :
<VirtualHost *:80>
ServerName www.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost>
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
</VirtualHost>
लेकिन आपने यह भी पूछा कि क्या आप इसे किसी .htaccess
फाइल में कर सकते हैं । उस स्थिति में आप Apache's RewriteEngine का उपयोग कर सकते हैं :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
यदि सब कुछ ठीक काम कर रहा है और आप चाहते हैं कि ब्राउज़र इस रीडायरेक्ट को याद रखें, तो आप अंतिम पंक्ति को बदलकर इसे स्थायी घोषित कर सकते हैं:
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
लेकिन सावधान रहें अगर आप इस पुनर्निर्देशन पर अपना विचार बदल सकते हैं। ब्राउज़र इसे बहुत लंबे समय तक याद रखते हैं और अगर यह बदल गया है तो यह जाँच नहीं करेगा।
आपको RewriteEngine On
वेबसर्वर कॉन्फ़िगरेशन के आधार पर पहली पंक्ति की आवश्यकता नहीं हो सकती है।
यदि आप PHP समाधान खोजते हैं, तो $ _SERVER सरणी और हेडर फ़ंक्शन को देखें :
if (!$_SERVER['HTTPS']) {
header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
}
.htaccess
फाइल में और क्या जा सकता है ?
निम्न कोड को .htaccess फ़ाइल में जोड़ें:
Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://[your domain name]%{REQUEST_URI} [R,L]
जहां [आपका डोमेन नाम] आपकी वेबसाइट का डोमेन नाम है।
आप ऊपर दिए गए कोड की अंतिम पंक्ति को बदलकर अपने डोमेन नाम से विशिष्ट फ़ोल्डरों को भी रीडायरेक्ट कर सकते हैं:
RewriteRule ^ https://[your domain name]/[directory name]%{REQUEST_URI} [R,L]
वह सब कुछ करें जो ऊपर पुनर्निर्देशन के लिए समझाया गया है। बस अपने शीर्ष लेख में "HTTP सख्त परिवहन सुरक्षा" जोड़ें। यह बीच के हमले में आदमी से बच जाएगा।
अपनी अपाचे कॉन्फ़िगरेशन फ़ाइल (/etc/apache2/sites-enabled/website.conf और /etc/apache2/httpd.conf को उदाहरण के लिए संपादित करें) और अपने VirtualHost में निम्न जोड़ें:
# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
<VirtualHost 67.89.123.45:443>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>
https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
सभी http
अनुरोधों को पुनर्निर्देशित करने के लिए https
, आप उपयोग कर सकते हैं:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
यदि mod-rewrite सक्षम नहीं है और आप Apache 2.4 पर हैं, तो आप अनुरोधों को पुनर्निर्देशित करने के लिए एक Redirect
अंदर के if
निर्देश का भी उपयोग कर सकते हैं ।http
https
अपाचे २.४।
<if "%{HTTPS} !~ /on/">
Redirect / https://www.example.com/
</if>
यदि आप ऐसी स्थिति में हैं, जहां आपकी अपाचे कॉन्फिग्रेशन सीधे आपकी साइट तक नहीं पहुंच सकती है, जो कई होस्ट किए गए प्लेटफ़ॉर्म अभी भी इस फैशन में प्रतिबंधित हैं, तो मैं वास्तव में दो-चरण दृष्टिकोण की सिफारिश करूंगा। अपने आप को अपाचे करने का कारण यह है कि आप पहले अपने विन्यास विकल्पों का उपयोग करें और HTTP से HTTPS के लिए mod_rewrite से आगे बढ़ें।
सबसे पहले, जैसा कि ऊपर बताया गया है, आप अपने .htaccess mod_rewrite नियम (s) को सेटअप करेंगे:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
फिर, आपकी PHP फ़ाइल (एस) में (आपको ऐसा करने की आवश्यकता है जहां यह कभी भी आपकी स्थिति के लिए उपयुक्त होगा, कुछ साइटें एक ही PHP फ़ाइल के माध्यम से सभी अनुरोधों को फ़नल कर देंगी, अन्य अपनी आवश्यकताओं के आधार पर विभिन्न पृष्ठों की सेवा करते हैं और अनुरोध किया जा रहा है ):
<?php if ($_SERVER['HTTPS'] != 'on') { exit(1); } ?>
उपरोक्त किसी भी कोड को चलाने की आवश्यकता है जो असुरक्षित वातावरण में सुरक्षित डेटा को संभावित रूप से उजागर कर सकता है। इस प्रकार आपकी साइट HTACCESS और mod_rewrite के माध्यम से स्वचालित पुनर्निर्देशन का उपयोग करती है, जबकि आपकी स्क्रिप्ट (एस) सुनिश्चित करती है कि HTTPS के माध्यम से एक्सेस नहीं होने पर कोई आउटपुट प्रदान नहीं किया जाता है।
मुझे लगता है कि ज्यादातर लोग ऐसा नहीं सोचते हैं, और इस तरह अपाचे की सलाह है कि आप इस पद्धति का उपयोग न करें जहां संभव हो। हालाँकि, यह सुनिश्चित करने के लिए कि आपके उपयोगकर्ता का डेटा सुरक्षित है, विकास के अंत में एक अतिरिक्त जाँच करें। उम्मीद है कि यह किसी और को मदद करता है, जिसे हमारी होस्टिंग सेवाओं पर प्रतिबंध के कारण गैर-अनुशंसित तरीकों का उपयोग करने पर ध्यान देना होगा।
.Htaccess के माध्यम से यह मदद करेगा।
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
इसके अलावा, अधिक विस्तार के लिए इसे देखें। Https पर Http कैसे रीडायरेक्ट करें?
जब तक कि आपको अन्य चीजों के लिए mod_rewrite की आवश्यकता न हो, Apache core का उपयोग करें यदि निर्देश क्लीनर और तेज है:
<If "%{HTTPS} == 'off'">
Redirect permanent / https://yoursite.com/
</If>
आप IF निर्देश में अधिक शर्तें जोड़ सकते हैं, जैसे कि www उपसर्ग के बिना एकल विहित डोमेन सुनिश्चित करें:
<If "req('Host') != 'myonetruesite.com' || %{HTTPS} == 'off'">
Redirect permanent / https://myonetruesite.com/
</If>
प्रत्येक चीज़ के लिए mod_rewrite का उपयोग करने में बहुत अधिक परिचित जड़ता है, लेकिन देखें कि क्या यह आपके लिए काम करता है।
अधिक जानकारी: https://httpd.apache.org/docs/2.4/mod/core.html#if
इसे कार्रवाई में देखने के लिए (www। या https: // के बिना, या .com के बजाय .net के साथ प्रयास करें ): https://nohodental.com/ (एक साइट जो मैं काम कर रहा हूं)।
इस कोड को अपने आप .htaccess फ़ाइल में रीडायरेक्ट HTTP से HTTPS में स्वचालित रूप से ले जाएँ
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
मुझे अपनी साइट के सभी पृष्ठों को http से पुनर्निर्देशित करने के लिए http पर पृष्ठों के एनालॉग के लिए मजबूर करने का एक तरीका मिला जो मेरे लिए काम करता है।
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
यह सभी URL को https और www पर रीडायरेक्ट करता है
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC,OR]
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
यदि आप इसे करना चाहते हैं तो tomcat सर्वर से नीचे दिए गए चरणों का पालन करें
एक स्टैंडअलोन Apache Tomcat (8.5.x) HTTP सर्वर में, यह कैसे कॉन्फ़िगर कर सकता है यदि कोई उपयोगकर्ता www.domain.com टाइप करता है, तो वे स्वचालित रूप से https (www.domain.com) साइट पर भेज दिए जाएंगे।
समापन टैग से पहले अपने [Tomcat_base] /conf/web.xml में निम्नलिखित को शामिल करने की 2 चरण विधि
step 1:
<security-constraint>
<web-resource-collection>
<web-resource-name>HTTPSOnly</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
और [Tomcat_base] /conf/server.xml कनेक्टर सेटिंग सेट करना:
step 2:
<Connector URIEncoding="utf-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443"/>
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="[keystorelocation]" type="RSA" />
</SSLHostConfig>
</Connector>
नोट: यदि आपने पहले से ही https कॉन्फ़िगरेशन किया है और केवल चरण 1 को पुनर्निर्देशित करने की कोशिश कर रहा है।
यदि आप अपाचे का उपयोग कर रहे हैं, mod_rewrite सबसे आसान समाधान है, और ऑनलाइन प्रलेखन बहुत है कि कैसे करना है। उदाहरण के लिए: http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html
इस समस्या के लिए एक अलग धार तब है जब एक लोड बैलेंसर खेल में आता है।
स्थिति निम्नानुसार है: - लोड बैलेंसर के लिए ब्राउज़र से ट्रैफ़िक, और पीछे, (होना चाहिए) HTTPS - लोड बैलेंसर और वास्तविक वेबसेवर के बीच ट्रैफ़िक HTTP है।
इसलिए, सभी सर्वर PHP या अपाचे में चर का अनुरोध करते हैं कि कनेक्शन सिर्फ HTTP है। और सर्वर पर HTTP और HTTPS निर्देशिका समान हैं।
अनुमोदित उत्तर में RewriteCondition काम नहीं करता है। यह या तो एक लूप देता है या यह सिर्फ काम नहीं करता है।
प्रश्न यह है: यह कैसे काम करने के लिए एक लोड बैलेंसर है।
(या लोड बैलेंसर गलत तरीके से कॉन्फ़िगर किया गया है। जो कि मैं उम्मीद कर रहा हूं क्योंकि तब मैं वेबहोस्ट कंपनी पर समस्या को स्थानांतरित कर सकता हूं :-))
यदि आप Amazon Web Services Elastic Load Balancer का उपयोग कर रहे हैं, जो https ट्रैफ़िक को स्वीकार करता है और इसे http के साथ आपके सर्वर (मार्गों) पर ले जाता है, तो http से सभी http ट्रैफ़िक को पुनर्निर्देशित करने का सही तरीका यहाँ वर्णित है: https://aws.amazon। com / premiumsupport / ज्ञान केन्द्र / पुनर्निर्देशित-http-https द्वारा Elb
X- फ़ॉर्वर्ड-प्रोटो हेडर (जिसमें http या https होता है) का उपयोग करें, जो हमेशा लोड बैलेंसर से http अनुरोधों में शामिल होता है, जैसा कि यहाँ वर्णित है: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x/ अग्रेषित-headers.html
Httpd.conf फ़ाइल में:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>
या अपनी रूट .htaccess फ़ाइल में:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
बोनस: यह आपके स्थानीय विकास मशीन पर http ट्रैफ़िक को पुनर्निर्देशित करने का प्रयास नहीं करेगा।
इससे मेरा काम बनता है:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
और उदाहरण के लिए, http: // server / foo? ईमेल = कोई% 40example.com सामान्य रूप से बिना किसी समस्या के पुनर्निर्देशित करता है। फ़ाइल .htaccess वेबसाइट रूट फ़ोल्डर (उदाहरण के लिए public_html नाम) में स्थित है। ReriteCond% {SERVER_PORT}! का उपयोग करना संभव है ! ^ RewiteCond % {HTTPS} के बजाय 443 $ !
httpd
PHP के साथ नहीं, अपने माध्यम से ऐसा कर सकते हैं (और करना चाहिए) ।