HTTPS के लिए सभी HTTP रिक्वेस्ट को रीडायरेक्ट कैसे करें


294

मैं अपनी साइट (जैसे http://www.example.com) पर सभी असुरक्षित HTTP अनुरोधों को HTTPS ( https://www.example.com) में पुनर्निर्देशित करना चाह रहा हूं । मैं PHP btw का उपयोग कर रहा हूँ। क्या मैं ऐसा कर सकता हूं।


1
आप httpdPHP के साथ नहीं, अपने माध्यम से ऐसा कर सकते हैं (और करना चाहिए) ।
परिश्रम से काम करना

2
@jnpcl, जबकि मैं मानता हूं कि httpd समाधान बेहतर है कि PHP- आधारित समाधान, मुझे नहीं लगता कि एक व्यवस्थित पुनर्निर्देशन सामान्य रूप में एक अच्छा अभ्यास है। यदि आप अपने उपयोगकर्ताओं को हर समय HTTPS पर पुनर्निर्देशित करना चाहते हैं, तो उन्हें "एंट्री पॉइंट" (आपकी साइट का पहला लिंक) से भेजें, इसे आधे रास्ते से न करें, जो आपके द्वारा सोचे गए कुछ डेटा को लीक कर सकता है। संरक्षित है (यदि आप उस तात्कालिक पुनर्निर्देशन पर ध्यान नहीं देते हैं)।
ब्रूनो

@ ब्रूनो: मैं डुप्लिकेट किए गए http अनुरोधों, खोए हुए क्वेरी स्ट्रिंग्स के लिए क्षमता और उपयोगकर्ता द्वारा मैन्युअल रूप से टाइप करने की संभावना के साथ अधिक सोच रहा थाhttp://
ड्रॉज

@jnpcl यह वास्तव में एक अच्छा बिंदु है। मैं केवल यह सुझाव दे रहा था कि, जब लोग अपनी साइट की सुरक्षा को बेहतर बनाने के लिए इस तरह के पुनर्निर्देशन की माँग करते हैं, तो अक्सर, यह वास्तव में इसमें सुधार नहीं करता है (क्योंकि यह पहले सादे HTTP से गुजरने के समान अनुरोध को नहीं रोकता है) ।
ब्रूनो

8
@outis: आपके द्वारा पोस्ट किया गया पहला लिंक यह प्रश्न है।
मेई

जवाबों:


305

अद्यतन: हालांकि इस जवाब को कुछ साल पहले स्वीकार किया गया है, ध्यान दें कि अपाचे प्रलेखन द्वारा इसके दृष्टिकोण की सिफारिश की गई है। Redirectइसके बजाय प्रयोग करें । इस जवाब को देखें ।


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

24
@Cat, जैसा कि मैं अपने उत्तर / टिप्पणियों में कह रहा था, यदि आप "सभी असुरक्षित HTTP [...] को HTTPS पर पुनर्निर्देशित" करने का प्रयास कर रहे हैं, तो यह दृष्टिकोण उन अनुरोधों को सुरक्षित नहीं बनाएगा, यह सिर्फ ब्राउज़र को उन्हें बना देगा। दो बार, एक बार असुरक्षित और एक बार सुरक्षित।
ब्रूनो

13
आपको वास्तव में क्या करना चाहिए, इस के साथ कंसर्ट में HSTS का उपयोग कर रहा है ।
रीज मूर

3
यह अपाचे के मेरे संस्करण में एक बग हो सकता है (सेंट्रो 7 में पैक के रूप में 2.4.6), लेकिन इसके लिए मेरे लिए कई यूआरएल हैं। उदाहरण के लिए, "@" चिह्न http://server/foo?email=someone%40example.comको पुनर्निर्देशित https://server/foo?email=someone%2540example.comURL को दो बार उद्धृत किया जाता है । @ Ssc के उत्तर में विधि का उपयोग करने से यह समस्या नहीं होती है।
भजन

2
गलत जवाब। यह केवल आधार url को पुनर्निर्देशित करेगा, सबफ़ोल्डर्स में url नहीं। RewriteRule (। *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L] सही उत्तर है
FredTheWebGuy

7
वे इसके खिलाफ जरूरी सिफारिश नहीं करते हैं: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.
एडम

338

अपाचे डॉक्स एक पुनर्लेखन का उपयोग कर के खिलाफ सलाह देते हैं:

httpURL को पुनर्निर्देशित करने के लिए 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के रूप में प्रश्न में पूछा।

यह लेख शायद सवाल पूछने और जवाब देने के बाद ही सामने आया होगा, लेकिन लगता है कि यह मौजूदा रास्ता है।


11
यह वर्तमान उत्तर होना चाहिए। लेकिन वास्तव में "एसएसएल कॉन्फ़िगरेशन" में क्या जाता है? एक पूर्ण उदाहरण वास्तव में मददगार होगा।
बेन

6
@ बान: यह एक अलग प्रश्न है जो बड़े पैमाने पर ऑनलाइन प्रलेखित है; संयोग से, मैंने कल ही एक लगभग पूर्ण उदाहरण जोड़ा: serverfault.com/q/597012/26210 जो आपको एसएसएल कॉन्फ़िगरेशन में जाने का अंदाजा दे सकता है
ssc

46
यह एक महान संकेत है। लेकिन Apache doc में यह भी उल्लेख किया गया है: "http-to-https पुनर्निर्देशन के मामले में, यदि आप मुख्य सर्वर कॉन्फ़िगरेशन फ़ाइल तक पहुँच नहीं रखते हैं, तो ReriteRule का उपयोग उचित होगा, और इस कार्य को करने के लिए बाध्य हैं इसके बजाय .htaccess फ़ाइल। " मेरे लिए ऐसा क्या है ...
peter_the_oak

4
@ user1844933 यदि आप permanentकीवर्ड का उपयोग करते हैं , तो प्रभाव समान है (ब्राउज़र को 301 रीडायरेक्ट प्राप्त होता है)। जैसे:Redirect permanent "/" "https://example.com"
बीटलज्यूइस

2
@Hitecat Centos 6 में फ़ाइल /etc/httpd/conf/httpd.conf पर स्थित है
dstonek

141

मैं 301 पुनर्निर्देशन की सलाह दूंगा:

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

7
धन्यवाद, यह मेरे लिए काम करता है, स्वीकृत उत्तर नहीं देता है .. शायद कमी के कारण[L]
billynoah

1
हां। यह सही उत्तर है क्योंकि यह सब
यूरोल्डर्स

क्या यह htaccess फ़ाइल के शीर्ष स्तर पर है?
CodyBugstein

1
@CodyBugstein यही वह जगह है जहां मैं हमेशा इसे रखता हूं, और यह हमेशा काम करता है।
दान वैन डेन बर्ग

3
सभी उत्तरों में एक बात का अभाव है - पुनर्निर्देशन के लिए कोई भी कोड आपकी .htaccess फ़ाइल की शुरुआत में सही रखा जाना चाहिए, और कुछ भी हो, यदि आप चाहते हैं कि सभी पृष्ठ https पर पुनर्निर्देशित हो जाएं।
वादिम अनीसिमोव

35

जैसा कि मैं इस प्रश्न में कह रहा था , मेरा सुझाव है कि आप सभी HTTP अनुरोधों को उनके HTTPS के बराबर नेत्रहीन रूप से पुनर्निर्देशित करने से बचें, क्योंकि इससे आपको सुरक्षा की गलत धारणा हो सकती है। इसके बजाय, आपको शायद अपनी HTTP साइट की "रूट" को अपनी HTTPS साइट के रूट पर भेजना चाहिए और वहां से लिंक करना होगा, केवल HTTPS को।

समस्या यह है कि अगर HTTPS साइट पर कुछ लिंक या फ़ॉर्म क्लाइंट को HTTP साइट पर अनुरोध भेजते हैं, तो इसकी सामग्री पुनर्निर्देशन से पहले दिखाई देगी।

उदाहरण के लिए, यदि आपके किसी पृष्ठ को HTTPS पर सेवा दी गई है, जिसमें एक फॉर्म है जो कहता है <form action="http://example.com/doSomething">और कुछ डेटा भेजता है जो स्पष्ट रूप से नहीं भेजे जाने चाहिए, तो ब्राउज़र पहले HTTP साइट पर पूर्ण अनुरोध (यदि यह एक POST है) सहित भेज देगा प्रथम। पुनर्निर्देशन को तुरंत ब्राउज़र में भेजा जाएगा और, चूंकि बड़ी संख्या में उपयोगकर्ता चेतावनी को अक्षम या अनदेखा करते हैं, इसलिए इसे अनदेखा करने की संभावना है।

बेशक, लिंक प्रदान करने की गलती जो HTTPS साइट के लिए होनी चाहिए, लेकिन जो HTTP साइट के लिए हो रही है, जैसे ही आपको अपने HTTPS साइट के समान IP पते पर HTTP पोर्ट पर कुछ सुनने को मिलता है, समस्याएँ पैदा हो सकती हैं। हालांकि, मुझे लगता है कि दोनों साइटों को "दर्पण" के रूप में रखने से केवल गलतियां होने की संभावना बढ़ जाती है, क्योंकि आप यह धारणा बना सकते हैं कि उपयोगकर्ता को HTTPS पर पुनर्निर्देशित करके यह स्वतः ही सही हो जाएगा, जबकि यह अक्सर बहुत देर हो चुकी होती है। ( इस सवाल में भी ऐसी ही चर्चा थी )


1
संपूर्ण साइट को HTTPS के रूप में सेवा देने का निर्णय करते समय, इस तरह के पुनर्निर्देशन से समझ में आता है। मैं नहीं चाहता कि एक उपयोगकर्ता को 403 मिले क्योंकि उन्होंने अपने लैंडिंग पृष्ठ के लिए http निर्दिष्ट किया था। मैं सहमत हूँ कि अगर कोई http को किसी लिंक में निर्दिष्ट करता है और उसे उत्पादन के लिए तैनात करता है जो कि खराब है। यह परीक्षण के दौरान पकड़ा जाना चाहिए, यहां तक ​​कि जगह में पुनर्निर्देशन के साथ। मुझे "तर्क" नहीं पसंद है क्योंकि यह "" जगह में पुनर्निर्देशन के बिना हो सकता है। लक्षण एक ही जब एक सुरक्षित ब्राउज़र में परीक्षण, पुष्टि करने के बाद छोड़कर एक 403 प्राप्त करने के स्पष्ट यह पुनर्निर्देश में भेजने के लिए बजाय हैं
डेरेक Litz

हाँ, मुझे यह देखने में मुश्किल है कि अगर किसी ने गलती से http को एक कार्रवाई में डाल दिया, तो उसे असफल होने का लाभ मिलता है, लेकिन ज्यादातर मामलों में टाइप किए गए URL के साथ उत्तरदायी होना अधिक महत्वपूर्ण लगता है।
डैनियल लुबरोव

4
@ डैनियल, मैं मानता हूं कि जब उपयोगकर्ता URL में टाइप करते हैं तो वह उदार होना उपयोगी होता है। मैं कहूंगा कि यह उन मामलों में से एक है जहां विकास / परीक्षण के दौरान यह सुविधा बंद होना बेहतर है लेकिन इसे उत्पादन पर (या विकास / परीक्षण के अंतिम चरणों में) चालू करें।
ब्रूनो

क्यों नहीं dn पर http से https करते हैं।
मुहम्मद उमर

1
@MuhammadUmer, क्योंकि इसका DNS से ​​कोई लेना-देना नहीं है। वे समान रूप से एक ही होस्ट नाम का उपयोग कर रहे होंगे, लेकिन एक अलग होस्ट नाम के साथ, आपको अभी भी प्रोटोकॉल और पोर्ट बदलने की आवश्यकता होगी।
ब्रूनो

18

मुझे पता चला कि डोमेन पर 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 पर पुनर्निर्देशित करना चाहिए ।
मृदुइट

मैं यह पाठ कहाँ रखूँ?
एरोन फ्रेंके

इसी प्रकार के प्रश्न पर। किसी को भी नीचे प्रश्न के साथ मदद कर सकते हैं? stackoverflow.com/questions/59503217/…
appsntech

14

यह 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? इसके अलावा, वह लिंक मर चुका है।
आरोन फ्रेंके

8

मुझे http से https तक रीडायरेक्ट करने का यह तरीका पसंद है। क्योंकि मुझे इसे प्रत्येक साइट के लिए संपादित करने की आवश्यकता नहीं है।

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

मैं यह पाठ कहाँ रखूँ?
एरोन फ्रेंके

6

अपनी .htaccess फ़ाइल में निम्न कोड का उपयोग करते हुए स्वचालित रूप से आगंतुकों को आपकी साइट के HTTPS संस्करण में पुनर्निर्देशित करता है:

RewriteEngine On

RewriteCond %{HTTPS} off

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

यदि आपके पास एक .htaccess फ़ाइल है:

रिवट्राइटिनाइन पर डुप्लिकेट न करें।

सुनिश्चित करें कि रेवेरिटकॉन्ड और रेव्रीट्रूअल की शुरुआत करने वाली पंक्तियाँ तुरंत पहले से मौजूद रेव्रीटेगाइन ऑन का अनुसरण करें।


L और R का क्या अर्थ है?
एरोन फ्रेंके

5

यह 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


5

सबसे अच्छा समाधान आपकी आवश्यकताओं पर निर्भर करता है। यह कुछ संदर्भों के साथ पहले से पोस्ट किए गए उत्तरों का सारांश है।

यदि आप 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 में किया जा सकता है। लेकिन आप केवल http ट्रैफ़िक को https में पुनर्निर्देशित करने के लिए शर्त नहीं जोड़ सकते। यह https को भी पुनर्निर्देशित करता है -> अनंत पुनर्निर्देशित लूप। मैंने इसे http (पोर्ट 80) के लिए उपयोग किए जाने वाले वर्चुअलहोस्ट निर्देश में सूचीबद्ध किया है।
माईकेल ma ’

4

निम्न कोड को .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]

L और R का क्या अर्थ है?
एरोन फ्रेंके

4

वह सब कुछ करें जो ऊपर पुनर्निर्देशन के लिए समझाया गया है। बस अपने शीर्ष लेख में "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


2

सभी httpअनुरोधों को पुनर्निर्देशित करने के लिए https, आप उपयोग कर सकते हैं:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

यदि mod-rewrite सक्षम नहीं है और आप Apache 2.4 पर हैं, तो आप अनुरोधों को पुनर्निर्देशित करने के लिए एक Redirectअंदर के ifनिर्देश का भी उपयोग कर सकते हैं ।httphttps

अपाचे २.४।

<if "%{HTTPS} !~ /on/">
Redirect / https://www.example.com/
</if>

2

यदि आप ऐसी स्थिति में हैं, जहां आपकी अपाचे कॉन्फिग्रेशन सीधे आपकी साइट तक नहीं पहुंच सकती है, जो कई होस्ट किए गए प्लेटफ़ॉर्म अभी भी इस फैशन में प्रतिबंधित हैं, तो मैं वास्तव में दो-चरण दृष्टिकोण की सिफारिश करूंगा। अपने आप को अपाचे करने का कारण यह है कि आप पहले अपने विन्यास विकल्पों का उपयोग करें और 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 के माध्यम से एक्सेस नहीं होने पर कोई आउटपुट प्रदान नहीं किया जाता है।

मुझे लगता है कि ज्यादातर लोग ऐसा नहीं सोचते हैं, और इस तरह अपाचे की सलाह है कि आप इस पद्धति का उपयोग न करें जहां संभव हो। हालाँकि, यह सुनिश्चित करने के लिए कि आपके उपयोगकर्ता का डेटा सुरक्षित है, विकास के अंत में एक अतिरिक्त जाँच करें। उम्मीद है कि यह किसी और को मदद करता है, जिसे हमारी होस्टिंग सेवाओं पर प्रतिबंध के कारण गैर-अनुशंसित तरीकों का उपयोग करने पर ध्यान देना होगा।


1

.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 कैसे रीडायरेक्ट करें?


1
यह किसी के लिए समाधान जाना है, जिसे "बहुत अधिक रीडायरेक्ट त्रुटि" मिलती है और वह भत्ते की संपत्ति को बदल नहीं सकता है।
इवोक्रोम

1

जब तक कि आपको अन्य चीजों के लिए 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/ (एक साइट जो मैं काम कर रहा हूं)।


1

इस कोड को अपने आप .htaccess फ़ाइल में रीडायरेक्ट HTTP से HTTPS में स्वचालित रूप से ले जाएँ

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


नमस्ते, उत्तर के लिए धन्यवाद, आपका जवाब क्या जोड़ता है जो अन्य मौजूदा उत्तर नहीं है?
ग्रैसी

इसी प्रकार के प्रश्न पर। किसी को भी नीचे प्रश्न के साथ मदद कर सकते हैं? stackoverflow.com/questions/59503217/…
appsntech

0

मुझे अपनी साइट के सभी पृष्ठों को http से पुनर्निर्देशित करने के लिए http पर पृष्ठों के एनालॉग के लिए मजबूर करने का एक तरीका मिला जो मेरे लिए काम करता है।

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

0
 Redirect 301 / https://example.com/

(मेरे लिए काम किया जब उपरोक्त उत्तर में से कोई भी काम नहीं किया गया)

बक्शीश:

ServerAlias www.example.com example.com

(फिक्स्ड https: // www .example.com नहीं मिला)


0

यह सभी 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]

0

यदि आप इसे करना चाहते हैं तो 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 को पुनर्निर्देशित करने की कोशिश कर रहा है।



-1

इस समस्या के लिए एक अलग धार तब है जब एक लोड बैलेंसर खेल में आता है।

स्थिति निम्नानुसार है: - लोड बैलेंसर के लिए ब्राउज़र से ट्रैफ़िक, और पीछे, (होना चाहिए) HTTPS - लोड बैलेंसर और वास्तविक वेबसेवर के बीच ट्रैफ़िक HTTP है।

इसलिए, सभी सर्वर PHP या अपाचे में चर का अनुरोध करते हैं कि कनेक्शन सिर्फ HTTP है। और सर्वर पर HTTP और HTTPS निर्देशिका समान हैं।

अनुमोदित उत्तर में RewriteCondition काम नहीं करता है। यह या तो एक लूप देता है या यह सिर्फ काम नहीं करता है।

प्रश्न यह है: यह कैसे काम करने के लिए एक लोड बैलेंसर है।

(या लोड बैलेंसर गलत तरीके से कॉन्फ़िगर किया गया है। जो कि मैं उम्मीद कर रहा हूं क्योंकि तब मैं वेबहोस्ट कंपनी पर समस्या को स्थानांतरित कर सकता हूं :-))


पुनर्निर्देशन सिर्फ लोड बैलेंसर पर होना होगा। लोड बैलेंसर के प्रकार के आधार पर, यह संभव है कि यह विन्यास में हो, या यह स्वयं एक अपाचे उदाहरण है, जहां स्वीकृत उत्तर काम करेगा। बस इसे एकल नोड पर न करें।
marc82ch

-1

यदि आप 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 ट्रैफ़िक को पुनर्निर्देशित करने का प्रयास नहीं करेगा।


-1

इससे मेरा काम बनता है:

<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 $ !

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.