गैर-www को .htaccess में www पर पुनर्निर्देशित करें


189

मेरे पास मेरी .htaccess फ़ाइल में यह है:

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

लेकिन जब भी मैं अपने रूट पर किसी फाइल को एक्सेस करता हूं, जैसे http://example.com/robots.txtयह रीडायरेक्ट करेगा http://www.example.comrobots.txt/

मैं इसे कैसे सही कर सकता हूं ताकि यह सही तरीके से रीडायरेक्ट हो जाए http://www.example.com/robots.txt?

जवाबों:


390

अपने कॉन्फ़िगरेशन को इसमें बदलें (स्लैश जोड़ें):

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

या नीचे उल्लिखित समाधान ( @absiddiqueLive द्वारा प्रस्तावित ) किसी भी डोमेन के लिए काम करेगा:

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

यदि आपको http और https का समर्थन करने और प्रोटोकॉल विकल्प को संरक्षित करने की आवश्यकता है, तो निम्नलिखित प्रयास करें:

RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]

जहाँ आप HTTPS को सपोर्ट करने के लिए या जिस भी URL की जरूरत है, उसके loginसाथ बदलते हैं checkout.php

मेरा तर्क है कि यह एक बुरा विचार है। तर्क के लिए कृपया इस उत्तर को पढ़ें


जब कुछ पृष्ठ (जैसे लॉगिन या साइन अप) https प्रोटोकॉल का उपयोग करते हैं तो यह समाधान काम नहीं करता है।
एलेक्सी कोसोव

मैंने कुछ जानकारी शामिल करने के लिए पोस्ट को थोड़ा अपडेट किया है। यह आनुवंशिक रूप से और सही ढंग से उपयोग करने के लिए प्रोटोकॉल दोनों को चुनना मुश्किल है।
रान्डेल हंट

2
पहला समाधान पर्याप्त पुनर्निर्देशित नहीं करता है, दूसरा बहुत अधिक पुनर्निर्देशित करता है। उदाहरण के लिए blog.example.comबन जाता हैwww.blog.example.com
gman

क्या आप कृपया यह भी जोड़ सकते हैं कि लोकलहोस्ट पर विकसित होने के दौरान रीडायरेक्ट से कैसे बचा जाए?
बग्स बनी

ive यहाँ पर सब कुछ का पालन कर रहा है लेकिन कुछ भी काम नहीं कर रहा है। लार्वा सेटअप का उपयोग कर Im। किसी को भी पता नहीं क्यों यह मेरे लिए काम नहीं कर रहा है? www.domain.com और domain.com दोनों ही ठीक से लोड होते हैं, लेकिन domain.com www.domain.com पर पुनर्निर्देशित नहीं होता है। क्या यह मेरे DNS के साथ कोई समस्या हो सकती है?
हैलो वर्ल्ड

92

यहाँ सही समाधान है जो https और http का समर्थन करता है:

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

7
यह एकदम सही है, यह उप-डोमेन को wwwअन्य जेनेरिक समाधानों को पसंद करने के लिए पुनर्निर्देशित नहीं करता है।
फैबियन शेंगलर

4
यह एक सबसे अच्छा समाधान है, स्वीकृत उत्तर की तुलना में बहुत बेहतर काम करता है, और HTTPS की ठीक से देखभाल करता है
तामिक सोजिएव

3
अच्छी तरह से काम! और ऐसी कुछ लाइनों में!
zeckdude 3

7
यह सबसे अच्छा जवाब है
एंड्रयू

7
अगर मैं गलत नहीं हूं, तो यह एक से अधिक डॉट के लिए काम नहीं करेगा। उदाहरण:yoursite.co.uk
TrashyMcTrash 14

82
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

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

Https के लिए

RewriteCond %{HTTPS}s ^on(s)|

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

7
यह समाधान @ रैनमैन के लिए पसंद किया जाता है क्योंकि यह सभी डोमेन के लिए काम करेगा और इस प्रकार मानवीय त्रुटि को कम करेगा जब आप किसी नई परियोजना के लिए कोड लागू कर रहे हों या जब आप किसी मौजूदा प्रोजेक्ट पर अतिरिक्त डोमेन लागू करते हों।
फ्रेंकी

मैं इस समाधान को पसंद करता हूं, लेकिन ^(.*)$इसके बजाय क्यों (.*)?
17

यह समाधान बेहतर है, लेकिन मैंने तुम्हारा होने के लिए मेरा संपादन किया है।
रान्डेल हंट

1
यह सभी डोमेन के लिए सरल और प्रभावी काम कर रहा है! धन्यवाद
eirenaios

आप RewriteCond% {HTTPS} s ^ on (s) का अनुसरण कर सकते हैं | RewriteRule ^ http% 1: //www.% {HTTP_HOST} / $ 1 [R = 301, L]
absiddiqueLive

23

निम्न उदाहरण ssl और गैर- ssl दोनों पर काम करता है और यह बहुत तेज़ है क्योंकि आप http और https को प्रबंधित करने के लिए सिर्फ एक नियम का उपयोग करते हैं

RewriteEngine on


RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

[परीक्षण]

यह पुनर्निर्देशित करेगा

एचटीटीपी

सेवा

https

सेवा


1
बहुत करीब से जो मैं लेकर आया था। HTTP होस्ट में एक से अधिक डॉट का भी समर्थन करता है, उदाहरण के लिए "mysite.co.uk"।
अदम्बियन

2
जिज्ञासा से बाहर, आप यहाँ R = 301 का उपयोग क्यों नहीं कर रहे हैं? यदि कोई कोड निर्दिष्ट नहीं है तो यह डिफ़ॉल्ट रूप से 302 (स्थानांतरित अस्थायी) का उपयोग करेगा।
मार्क

1
अच्छी तरह से काम। यह स्वीकृत उत्तर होना चाहिए।
जेम्स निस्बेट

8

यह कोशिश करो, मैंने इसे कई वेबसाइटों में इस्तेमाल किया, यह पूरी तरह से काम करता है

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1  [QSA,L,R=301]

4

मैंने उपरोक्त सभी समाधानों का परीक्षण किया है, लेकिन मेरे लिए काम नहीं कर रहा है, मैंने http: // को हटाने की कोशिश की है और www को भी पुनर्निर्देशित नहीं करेगा, इसे अच्छी तरह से हटा दिया है, इसलिए मैं भ्रमित हो जाता हूं, विशेष रूप से मैं अपने सभी साइटों को https के तहत चला रहा हूं : //

इसलिए मैंने कुछ कोड एक साथ जोड़ दिए हैं और http: // और https: // और www और non-www दोनों के लिए सही समाधान के साथ आया है।

# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

उम्मीद है कि यह किसी की मदद कर सकते हैं :)


3

.Htaccess फ़ाइल में निम्न कोड जोड़ें।

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

यूआरएल पुनर्निर्देशित ट्यूटोरियल यहाँ से पाया जा सकता है - गैर-www पर रीडायरेक्ट www।


3

इस विन्यास ने मेरे लिए एसएसएल कॉन्फ़िगर के साथ बिटनामी वर्डप्रेस में काम किया:

नीचे दिए गए "RewriteEngine On" के तहत फ़ाइल /opt/bitnami/apps/wordpress/conf/httpd-app.conf

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

यह आपके डोमेन को रीडायरेक्ट करेगा जो कि WWW के साथ शुरू नहीं हुआ है। यह आपके सभी उप डोमेन को रीडायरेक्ट नहीं करता है।

यह उपयोगी है।


2

मेरा मानना ​​है कि शीर्ष उत्तर सफलतापूर्वक गैर-www को www (ex: mysite.com -> www.mysite.com ) पर पुनर्निर्देशित करता है, लेकिन वाइल्डकार्ड सबडोमेन को ध्यान में नहीं रखता है, जिसके परिणामस्वरूप:

random.mysite.com -> www.random.mysite.com

यहाँ HTTPS के साथ / बिना एक समाधान है

एचटीटीपी

RewriteEngine On

RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ http%{ENV:protossl}://www.mysite.com/$1 [L,R=301] 

HTTP / HTTPS

RewriteEngine On

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]

RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/$1 [L,R=301]

* नोट: मैंने https का परीक्षण नहीं किया है क्योंकि मेरे पास परीक्षण करने के लिए वर्तमान में कोई प्रमाण पत्र नहीं है, लेकिन अगर कोई मेरे पास जो कुछ है, उसे सत्यापित या अनुकूलित कर सकता है।


पहला $ यहाँ क्या करता है: '^ (। *) $'
वैशाल पटेल

0

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

<VirtualHost 64.65.66.67>
        ServerName example.com
        Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
   ServerAdmin me@example.com
   ServerName www.example.com
   DocumentRoot /var/www/example
   .
   .
   . etc

तो, VirtualHost"example.com" के लिए अलग उन अनुरोधों को पकड़ता है और फिर स्थायी रूप से उन्हें आपके मुख्य पर पुनर्निर्देशित करता है VirtualHost। इसलिए हर अनुरोध के साथ कोई REGEX पार्स नहीं हो रहा है, और आपके क्लाइंट ब्राउज़र रीडायरेक्ट को कैश कर देंगे ताकि वे कभी भी (या शायद ही कभी) "गलत" यूआरएल को फिर से अनुरोध न करें, जिससे आपको सर्वर लोड पर बचत होगी।

ध्यान दें, अनुगामी स्लैश में Redirect permanent / http://www.example.com/। इसके बिना, इसके बजाय एक रीडायरेक्ट पुनर्निर्देशित example.com/asdfहोगा ।http://www.example.comasdfhttp://www.example.com/asdf


0

दो चेतावनी

301 से बचें और आधुनिक 303 या 307 प्रतिक्रिया स्थिति कोड पसंद करें।

301 से बचें

ध्यान से सोचें अगर आपको वास्तव में बताए गए स्थायी पुनर्निर्देशन की आवश्यकता है [R=301]क्योंकि यदि आप इसे बाद में बदलने का निर्णय लेते हैं, तो पृष्ठ के पिछले आगंतुक मूल पुनर्निर्देशन के पृष्ठ को देखना जारी रखेंगे।

स्थायी पुनर्निर्देशन की जानकारी अक्सर ब्राउज़र के कैश में संग्रहीत की जाती है और, सामान्य रूप से, इसे समाप्त करना मुश्किल होता है (पृष्ठ को फिर से लोड नहीं करना समस्या का समाधान नहीं होता है)। आपकी वेबसाइट विज़िटर पिछले रीडायरेक्ट "हमेशा" में अटक जाएगी।

302 से भी बचें

HTTP प्रोटोकॉल (v1.1) के नए संस्करण में दो नए प्रतिक्रिया स्थिति कोड जोड़े गए जिनका उपयोग 302 के बजाय किया जा सकता है।

  • 303 URL पुनर्निर्देशन लेकिन GET के अनुरोध के प्रकार को बदलने की मांग कर रहा है।
  • 307 URL पुनर्निर्देशन लेकिन शुरू में भेजे गए अनुरोध के प्रकार को रखने की मांग।

आप अभी भी कोड 302(गैर-स्थायी पुनर्निर्देशन) का उपयोग कर सकते हैं, हालांकि इसे अस्पष्ट माना जाता है। किसी भी स्थिति में, अधिकांश ब्राउज़र 302उसी तरह लागू होते हैं जैसे नया 303कोड निर्देश देता है।


301 के बारे में आपकी चेतावनी के बारे में, यह लागू होगा भले ही हम एक ही डोमेन नाम के बारे में बात कर रहे हों? यह निश्चित नहीं है कि यह इस मामले में कैसे लागू होगा ... सभी URL को इससे पुनर्निर्देशित http://example.com/testingकरना http://www.example.com/testing। दीर्घकालिक में एक बुरा दृष्टिकोण हो सकता है? धन्यवाद,
सारा_जूल

-1

.Htaccess में लिखें :)

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

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