apache tvs अपाचे को www से www तक रीडायरेक्ट करें




अपाचे बाइक नई मॉडल (17)

मेरे पास ऐसी वेबसाइट है जो गैर-www से www तक रीडायरेक्ट प्रतीत नहीं होती है।

मेरा अपाचे कॉन्फ़िगरेशन निम्नानुसार है:

RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc] 

मैं क्या खो रहा हूँ?


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

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

अपाचे में एक अनंत रीडायरेक्ट लूप से बचने के लिए www सबडोमेन में सभी डोमेन को रीडायरेक्ट करते समय www सबडोमेन को बाहर करने के लिए मैं लुक-आगे पैटर्न (?!www.domain.com) का उपयोग करता हूं।


मैं जिस कोड का उपयोग करता हूं वह है:

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

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

यह HTTP_HOST चर के साथ शुरू होता है, जिसमें आने वाले यूआरएल ( example.com ) का डोमेन नाम भाग होता है। मान लें कि डोमेन नाम में www. नहीं है www. और वास्तव में आपके डोमेन नाम से मेल खाता है, तो रिवाइटरूल खेल में आता है। पैटर्न ^(.*)$ REQUEST_URI में सबकुछ से मेल खाएगा, जो HTTP अनुरोध ( foo/blah/index.html ) में अनुरोध किया गया संसाधन है। यह इसे पीछे संदर्भ में संग्रहीत करता है, जिसका उपयोग तब यूआरएल को नए डोमेन नाम (जिसे www साथ शुरू होता है) के साथ फिर से लिखने के लिए किया जाता है।

[NC] केस-असंवेदनशील पैटर्न मिलान इंगित करता है, [R=301] कोड 301 (संसाधन स्थायी रूप से स्थानांतरित) का उपयोग कर बाहरी रीडायरेक्ट इंगित करता है, और [L] सभी आगे पुनर्लेखन रोकता है, और तुरंत रीडायरेक्ट करता है।


पुनर्लेख इंजन का उपयोग करना इस समस्या को हल करने के लिए एक बहुत ही भारी वजन है। यहां एक आसान समाधान है:

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / http://www.example.com/
</VirtualHost>

<VirtualHost *:80>
    ServerName www.example.com
    # real server configuration
</VirtualHost>

और उसके बाद आपके वास्तविक सर्वर कॉन्फ़िगरेशन के लिए ServerName www.example.com साथ एक और <VirtualHost> अनुभाग होगा। अपाचे स्वचालित रूप से Redirect निर्देश का उपयोग करते समय कुछ भी संरक्षित करता है, जो इस विधि को काम नहीं करेगा (वास्तव में यह कब करता है) के बारे में एक आम गलतफहमी है।


गैर-www => www और विपरीत www => गैर-www दोनों के लिए पुनर्निर्देशन कोड। .htaccess फ़ाइल में कोई हार्डकोडिंग डोमेन और स्कीम नहीं। तो मूल डोमेन और http / https संस्करण संरक्षित किया जाएगा।

अपाचे 2.4 और समाचार

गैर-डब्ल्यूडब्ल्यूडब्ल्यू => डब्ल्यूडब्ल्यूडब्ल्यू:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

डब्ल्यूडब्ल्यूडब्ल्यू => गैर-डब्ल्यूडब्ल्यूडब्ल्यू:

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

नोट: अपाचे 2.2 पर काम नहीं कर रहा है, जहां% {REQUEST_SCHEME} उपलब्ध नहीं है। Apache 2.2 के साथ संगतता के लिए नीचे दिए गए कोड का उपयोग करें या निश्चित http / https के साथ% {REQUEST_SCHEME} को प्रतिस्थापित करें।

अपाचे 2.2 और समाचार

गैर-डब्ल्यूडब्ल्यूडब्ल्यू => डब्ल्यूडब्ल्यूडब्ल्यू:

RewriteEngine On

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

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

... या छोटा संस्करण ...

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

डब्ल्यूडब्ल्यूडब्ल्यू => गैर-डब्ल्यूडब्ल्यूडब्ल्यू:

RewriteEngine On

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

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

... छोटा संस्करण संभव नहीं है क्योंकि% N केवल अंतिम रिवाइटकंड से उपलब्ध है ...


मुझे बस एक ही समस्या है। लेकिन इसके साथ हल किया

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

यह नियम गैर-www को www पर रीडायरेक्ट कर रहा है।

और यह नियम www को गैर-www पर रीडायरेक्ट करने के लिए

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

http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/ से देखें


अपनी URL वेबसाइट से www को हटाने के लिए इस कोड का उपयोग अपनी .htaccess फ़ाइल में करें:

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

अपनी वेबसाइट URL में www को मजबूर करने के लिए .htaccess पर इस कोड का उपयोग करें

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^YourSite.com$
RewriteRule ^(.*)$ http://www.yourSite.com/$1 [R=301]
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^(([^/]+/)*[^./]+)$ /$1.html [R=301,L]

जहां YourSite.com को आपके URL बदला जाना चाहिए।


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

इस सही काम की जांच करें


यदि विभिन्न ServerName साथ दो <VirtualHost *:80> ब्लॉक के उपरोक्त समाधान का उपयोग कर रहे हैं ...

<VirtualHost *:80>
    ServerName example.com
    Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
    ServerName www.example.com
</VirtualHost>

... तो आपको नाम NameVirtualHost On सेट करना होगा

यदि आप ऐसा नहीं करते हैं, तो अपाचे ब्लॉक को अलग करने के लिए अलग-अलग ServerName का उपयोग करने की अनुमति नहीं देता है, इसलिए आपको यह त्रुटि संदेश मिलता है:

[warn] _default_ VirtualHost overlap on port 80, the first has precedence

... और या तो कोई पुनर्निर्देशन नहीं होता है, या आपके पास पहले से डाले गए ब्लॉक के आधार पर एक अनंत पुनर्निर्देशन लूप होता है।


http://example.com/subdir/?lold=13666 => http://www.example.com/subdir/?lold=13666

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

    <VirtualHost *:80>
       DocumentRoot "what/ever/root/to/source"
       ServerName www.example.com

       <Directory "what/ever/root/to/source">
         Options FollowSymLinks MultiViews Includes ExecCGI
         AllowOverride All
         Order allow,deny
         allow from all
         <What Ever Rules You Need.>
      </Directory>

    </VirtualHost>

    <VirtualHost *:80>
      ServerName example.com
      ServerAlias *.example.com
      Redirect permanent / http://www.example.com/
    </VirtualHost>

उपरोक्त कोड के साथ यही होता है। पहला वर्चुअल होस्ट ब्लॉक जांचता है कि अनुरोध www.example.com है और उस निर्देशिका में आपकी वेबसाइट चलाता है।

जो विफल हो रहा है, यह दूसरे वर्चुअल होस्ट अनुभाग में आता है। Www.example.com के अलावा अन्य कुछ भी www.example.com पर रीडायरेक्ट किया गया है।

यहां आदेश है। यदि आप पहले दूसरा वर्चुअलहोस्ट निर्देश जोड़ते हैं, तो यह रीडायरेक्ट लूप का कारण बन जाएगा।

यह समाधान किसी भी अनुरोध को आपके डोमेन पर www.yourdomain.com पर रीडायरेक्ट करेगा।

चीयर्स!


<VirtualHost *:80>
    ServerAlias example.com
    RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>

<VirtualHost *:80>
    ServerAlias example.com
    RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>

यह न केवल डोमेन नाम बल्कि आंतरिक पृष्ठों को भी पुनर्निर्देशित करेगा। जैसा ...

example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh


मैंने यह भाग लिया ...

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

मुझे अपने नए सर्वर पर 25+ डोमेन के लिए सार्वभौमिक होने की आवश्यकता है, इसलिए यह निर्देश <virtual> टैग में मेरी वर्चुअल.conf फ़ाइल में है। (डीआईआर सभी डॉक्टरों के लिए माता पिता है)

मुझे फिर से लिखने के नियम पर एक हैक करना पड़ा, क्योंकि http://qpd.apache.org/docs/2.2/mod/mod_rewrite.html के बावजूद पूर्ण डॉक्रूट पैटर्न मिलान पर पूरा किया जा रहा था, इसके बारे में केवल मेजबान और बंदरगाह के बाद सामान होना।


मेरे पास एक WP मल्टीसाइट पर एक समान कार्य था, जहां पुनर्निर्देशन नियम सामान्य होना था (किसी दिए गए डोमेन के लिए मैं नेटवर्क में जोड़ूंगा)। मैंने पहले डोमेन (पार्क किए गए डोमेन) में वाइल्डकार्ड जोड़ने का हल किया। ध्यान दें । .com के बाद

CNAME * domain.com.

और फिर मैंने अपनी मल्टीसाइट के रूट पर .htaccess फ़ाइल में निम्न पंक्तियां जोड़ दीं। मुझे लगता है कि यह किसी भी साइट के लिए काम करेगा।

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

उम्मीद है कि यह मदद करेगा।

ps। यदि आप www से www तक रीडायरेक्ट करना चाहते हैं, तो अंतिम पंक्ति को बदलें

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

Www.tld को www पर रीडायरेक्ट करें।

निम्नलिखित पंक्तियों को या तो अपाचे निर्देशों में या .htaccess फ़ाइल में जोड़ा जा सकता है:

RewriteEngine on    
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  • अन्य सुडोमेन अभी भी काम कर रहे हैं।
  • लाइनों को समायोजित करने की कोई ज़रूरत नहीं है। बस उन्हें सही जगह पर कॉपी / पेस्ट करें।

यदि आप vhost को संशोधित करते हैं तो अपाचे परिवर्तनों को लागू करना न भूलें।

(डिफ़ॉल्ट Drupal7 .htaccess पर आधारित है लेकिन कई मामलों में काम करना चाहिए)


यदि आप अपाचे 2.4 का उपयोग कर रहे हैं, तो पुनः लिखने वाले अपाचे मॉड्यूल को सक्षम करने की आवश्यकता के बिना आप इस तरह कुछ उपयोग कर सकते हैं:

# non-www to www
<If "%{HTTP_HOST} = 'domain.com'">
  Redirect 301 "/" "http://www.domain.com/"
</If>




no-www