.htaccess सभी पृष्ठों को नए डोमेन पर पुनर्निर्देशित करता है


218

कौन सा रीडायरेक्ट नियम के तहत सभी पृष्ठों पुनर्निर्देशित करने के लिए प्रयोग करेंगे olddomain.exampleपर पुनः निर्देशित किया करने के लिए newdomain.example?

साइट की एक पूरी तरह से अलग संरचना है, इसलिए मैं चाहता हूं कि पुराने डोमेन के तहत हर पृष्ठ को नए डोमेन इंडेक्स पेज पर पुनर्निर्देशित किया जाए ।

मैंने सोचा था कि यह करना होगा (olddomain.example आधार निर्देशिका के तहत):

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.example/ [R=301]

लेकिन अगर मैं नेविगेट करता olddomain.example/somepageहूं तो मैं उस पर पुनर्निर्देशित हो जाता हूं newdomain.example/somepage। मैं केवल newdomain.exampleपृष्ठ प्रत्यय के बिना पुनर्निर्देशन की उम्मीद कर रहा हूं ।

मैं अंतिम भाग को बाहर कैसे रखूँ?


8
समय बचाने के लिए, सही उत्तर पर स्क्रॉल करें जो RewriteEngine on RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]* stackoverflow.com/a/7578810/1066234 है
काई नैक

2
यह इंगित करने के लायक है कि, विशेष रूप से एक एसईओ परिप्रेक्ष्य से, इंडेक्स / होम पेज के लिए कई-से-एक रीडायरेक्ट होना आमतौर पर एक बुरा विचार है। Google इसे नरम -404 के रूप में देखने की संभावना है।
MrWhite

जवाबों:


201

इस तरह हो सकता है:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^OLDDOMAIN\.com$ [NC]
RewriteRule ^(.*)$ http://NEWDOMAIN.com [R=301,L]

उम, क्या आप अपने ब्राउज़र को पुनः लोड करने का प्रयास कर सकते हैं? यहाँ भी xampp के साथ पुनर्निर्देशित किया जा रहा है। मैंने अभी-अभी परीक्षण किया है।
आप

मेरा बुरा ... यह काम करता है, मेरी होस्टिंग सेवा में कुछ अन्य रीडायरेक्ट थे, जिन पर **** बातें थीं। धन्यवाद! :)
युवल आदम

25
यह नहीं होगा RewriteCond %{HTTP_HOST} !^NEWDOMAIN\.com$ [NC]?
जिम ज्यूर्ट्स

1
एक लंबी सर्दियों के बाद मैंने कोड को संपादित किया ताकि यह अंत में काम कर सके। (यह सही है कि अगर EQUAL और पुराना नहीं करने के लिए पुनर्निर्देशित किया जाए, तो यही समस्या थी)
कार्ला

5
@JimGeurts केवल यदि आप हर उस चीज़ को पुनर्निर्देशित करना चाहते हैं जो कि नया कोड नहीं है। हालाँकि, इस मामले में, हम केवल पुराने डोमेन को पुनर्निर्देशित करना चाहते थे।
कार्ला

442

नीचे दिए गए उत्तर में संभावित रूप से एक अनंत अनुप्रेषित लूप हो सकता है ...

यहाँ, यह URL के डोमेन नाम के बाद सब कुछ रीडायरेक्ट करता है, नए डोमेन url पर एक ही कॉपी के लिए:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

www.example.net/somepage.html?var=foo पर पुनर्निर्देशित करता है www.newdomain.com/somepage.html?var=foo


21
इस नए अनुरोध को पुनर्निर्देशित नहीं किया जाएगा, भले ही newdomain.com के लिए भी? और अनिवार्य रूप से उन मामलों में दो डुप्लिकेट अनुरोधों का कारण बनता है?
बिल दामी

33
प्रश्न होम पेज पर सब कुछ पुनर्निर्देशित करना है
kravits88

28
हालांकि यह सवाल का जवाब नहीं है, लेकिन मैं एसई से इस सवाल पर आया था और वास्तव में इस जवाब की मांग कर रहा था। धन्यवाद !!!
dav

हम उप डोमेन से नए डोमेन पर पुनर्निर्देशन के लिए कैसे कर सकते हैं?
सुखजिंदर सिंह

2
क्या कोई बिल के सवाल का जवाब दे सकता है। क्या डुप्लिकेट अनुरोध और / या अनावश्यक री-राइट्स को रोकने के लिए किसी रीवेरिटकॉन्ड का उपयोग नहीं करना चाहिए? मुझे लगता है कि जरूरी नहीं है फिर भी हर बार फिर से लिखने के लिए इसका कोई ध्यान देने योग्य प्रभाव नहीं होगा। पर ऐसा क्यों।
एंड्रयू

80

बस स्पष्ट करने के लिए, होस्टिंग को हटाने के बाद जो रास्ते में था, मेरा मूल समाधान भी काम करता है:

RewriteEngine On
RewriteRule ^(.*)$ http://newdomain.com/ [R=301]

यह डिफ़ॉल्ट इंडेक्स को रीडायरेक्ट करेगा, जो कि आपका प्रश्न था। स्पष्टता के लिए, चूंकि, निकटता के कारण, आपका कथन उपयोगकर्ता 968421 के उत्तर की ओर निर्देशित किया गया प्रतीत होता है, इसके ठीक ऊपर, उपयोगकर्ता 968421 का उत्तर सही है जब आशय नए डोमेन पर संबंधित फ़ाइल नाम पर पुनर्निर्देशित करना है।
RationalRabbit

19

मैंने अपने वर्डप्रेस ब्लॉग के लिए इसे .htaccess के रूप में उपयोग किया है। यह http: //www.blah.example/asad , http: //blah.example/asad , http: //www.blah.example2/asad आदि को http: //blah.example/asad में कनवर्ट करता है। सभी के लिए धन्यवाद अन्य जवाब मैंने यह पता लगाया।

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

2
मैं इसे सभी का सबसे व्यापक उत्तर मानता हूं: यह हर पेज के लिए रैंकिंग को संरक्षित करता है और सभी डोमेन के लिए एक कैच है जो प्राथमिक नहीं है! इससे अच्छा क्या हो सकता है?
nzn 21

1
यहां कुंजी यह है कि वर्डप्रेस इंडेक्स नियम को फिर से लिखने से पहले डोमेन रीराइट नियम आता है ।
MrMox

14
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^olddomain.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www.olddomain.com$
  RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
</IfModule>

इसने मेरे लिए काम किया


हां, यह तरीका साफ और अच्छा होगा!, मेरे लिए भी काम किया।
कोडी

यह यूआरएल में पैरामीटर के साथ पुनर्निर्देशित करेगा यदि कोई हो - index.php? aa = 9 पैरामीटर को नए डोमेन पर ले जाएगा
Darksymphony

13

ऐसा करने के विभिन्न तरीके हैं और विभिन्न रीडायरेक्ट, मैंने उन्हें नीचे सूचीबद्ध किया है:

301 (स्थायी) रीडायरेक्ट: एक स्थायी आधार पर एक पूरी साइट को एक अलग URL पर इंगित करें। यह सबसे आम प्रकार का पुनर्निर्देश है और अधिकांश स्थितियों में उपयोगी है। इस उदाहरण में, हम "example.com" डोमेन पर रीडायरेक्ट कर रहे हैं:

# This allows you to redirect your entire website to any other domain
Redirect 301 / http://example.com/

302 (अस्थायी) पुनर्निर्देशित: एक पूरी साइट को एक अलग अस्थायी URL पर इंगित करें। जब आप एक अस्थायी लैंडिंग पृष्ठ और बाद की तारीख में अपने मुख्य लैंडिंग पृष्ठ पर वापस जाने की योजना बनाते हैं, तो यह एसईओ उद्देश्यों के लिए उपयोगी होता है:

# This allows you to redirect your entire website to any other domain
Redirect 302 / http://example.com/

एक विशिष्ट सबफ़ोल्डर में index.html को पुनर्निर्देशित करें:

# This allows you to redirect index.html to a specific subfolder
Redirect /index.html http://example.com/newdirectory/

एक पुरानी फ़ाइल को एक नई फ़ाइल पथ पर पुनर्निर्देशित करें:

# Redirect old file path to new file path
Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html

किसी विशिष्ट अनुक्रमणिका पृष्ठ पर पुनर्निर्देशित करें:

# Provide Specific Index Page (Set the default handler)
DirectoryIndex index.html

यदि आप पहले उदाहरण में $ 1 को जोड़ते हैं, Redirect 301 / http://example.com/$1 तो इस तरह से मूल साइट के सभी पृष्ठ नए साइट रूट पर पुनः निर्देशित हो जाएंगे
यासीन मोकनी

@YassinMK $1यहां आवश्यक नहीं है, आप RedirectMatchनिर्देश के बारे में सोच रहे हैं (लेकिन तब आपको $1संदर्भ के लिए कैप्चरिंग समूह को परिभाषित करने की आवश्यकता होगी )।
मृद्वीथ

हालाँकि ये सभी Redirectनिर्देश जैसे के लिए पुनर्निर्देशित होंगे, जबकि ओपी नई साइट के मुख पृष्ठ पर पुनर्निर्देशित करना चाहता है (हालांकि यह अपने आप में अनुशंसित नहीं है)। RedirectMatchयदि आपको किसी विशिष्ट URL पर पुनर्निर्देशित करना चाहते हैं तो आपको निर्देश का उपयोग करने की आवश्यकता हो सकती है ।
मृदोह

301 के बजाय आप रीडायरेक्ट स्थायी / h ttps भी लिख सकते हैं: //www.example.com, आप इसे vhost फ़ाइल में कर सकते हैं
Yvon Huynh

लेकिन .htaccess से संबंधित प्रश्न क्यों vhost फ़ाइल का उल्लेख करता है?
RustyIngles

9

यदि आप किसी स्थान से उप-डोमेन पर पुनर्निर्देशित करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

Redirect 301 /Old-Location/ http://subdomain.yourdomain.com


यह सबसे अच्छा तरीका है। क्योंकि बहुत से Webhosters ने .htaccess में RewriteEngine के उपयोग की अनुमति नहीं दी थी। यह वैसे भी महान काम करता है!
स्प्रिंटरफ्रेक

आपको पुनर्निर्देशित करने के लिए RewriteEngine का उपयोग करना चाहिए। कारण कि आपको समस्या थी कि रिवरटेन्जाइन पहले से ही सक्रिय था और आपको केवल पुनर्निर्देशित नियम की आवश्यकता थी। मुझे खुशी है कि मदद मिली।
EmptySD

सच नहीं। यह सभी रीराइट चीज़ को छोड़ देता है और RewriteEngine On500 आंतरिक त्रुटि का उपयोग करते समय । यह एक बहुत ही प्रतिबंधित Webspace है। का उपयोग करना Redirect 301 / http://fooही निपटने का एकमात्र संभव तरीका है।
स्प्रिंटरफ्रेक

6

यदि आप अपनी पुरानी साइट को पुनर्निर्देशित कर रहे हैं नया डोमेन एक अलग होस्ट पर है, तो आप बस एक का उपयोग कर सकते हैं Redirect

Redirect 301 / http://newdomain.com

इस से सभी अनुरोधों को रीडायरेक्ट करेगा olddomainकरने के लिए newdomain

Redirectनिर्देश काम नहीं करेगा या हो सकता है Redirect loopयदि आपका newdomain और olddomain दोनों एक ही होस्ट पर हैं, तो उस स्थिति में आपको mod-rewriteअनुरोधित होस्ट हेडर के आधार पर रीडायरेक्ट करने की आवश्यकता होगी ।

RewriteEngine on


RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RewriteRule ^ http://newdomain.com%{REQUEST_URI} [NE,L,R] 

5

मेरी प्रतिष्ठा मुझे एक उत्तर पर टिप्पणी करने की अनुमति नहीं देगी, लेकिन मैं सिर्फ यह बताना चाहता था कि यहां उच्चतम श्रेणी के उत्तर में त्रुटि है:

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com$1 [R=301,L]

$ 1 से पहले एक स्लैश होना चाहिए, इसलिए

RewriteEngine on 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

3

SymLinks के रूप में मेरा समाधान मेरे सर्वर पर काम नहीं करता था इसलिए मैंने अपने PHP में एक का उपयोग किया।

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
$redirect = str_replace("www.", "", curPageURL());
$remove_http_root    = str_replace('http://', '', $redirect);
$split_url_array     = explode('/', $remove_http_root );


if($split_url_array[0] == "olddomain.com"){
    header("Location: http://www.newdomain.com/$split_url_array[1]");
    die();
}

2

यह अपाचे (और इस प्रकार mod_rewrite) के पुराने संस्करणों में एक बग है जहां पथ उपसर्ग को फिर से लिखे गए पथ में जोड़ा गया था यदि यह बदल गया है। यहाँ देखें

मुझे लगता है कि यह apache2 V2.2.12 में तय किया गया था, एक विशेष ध्वज है जिसे आपको उपयोग करने की आवश्यकता है जिसे मैं इसे खोजने पर यहां जोड़ दूंगा, (मुझे लगता है कि यह एनपी फॉर नो पाथ था)

RewriteRule ^(.*)$ http://newdomain.com/ [??]

मैंने लगभग एक महीने तक इसके खिलाफ अपना सिर पीटा
प्रश्न

2

प्रयोज्यता के दृष्टिकोण से यह बेहतर होगा, यदि आप अनुरोध के साथ भी रास्ता भेजते हैं (यानी, इस समय आपके पास क्या है) और अपनी नई साइट को इससे निपटने दें:

आपने "/ उत्पादों" की खोज की।

दुर्भाग्य से यह पृष्ठ चला गया है। क्या आप इसके बजाय "/ new_products" पर जाना चाहेंगे?

(और बेहतर, फिर भी, यह स्वचालित रूप से कर रहा है।)

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


कहा वेबसाइट के लिए यह बहुत ज्यादा अप्रासंगिक है क्योंकि पूरी वेबसाइट बदल गई है, लेकिन आप बिल्कुल सही हैं। वेबसाइट यथासंभव पीछे की ओर संगत होनी चाहिए। +1
युवल एडम

2

यदि आप बिना किसी पैरामीटर या पृष्ठों के नए नए साइट (डोमेन) को पूरा करना चाहते हैं, तो इसका उपयोग करें:

RewriteEngine On
RewriteRule / http://new-domain.com/$1? [R=301]

1
जब .htaccessयह प्रयोग किया जाता है तो यह अपेक्षा के अनुरूप काम नहीं करेगा क्योंकि यह दस्तावेज़ रूट में किसी भी URL से मेल नहीं खाएगा। यह एक सर्वर कॉन्फिगर या VirtualHost संदर्भ में काम करेगा।
मृदोह

2

मैंने user968421 के उत्तर और ओपी के समाधान की कोशिश की, लेकिन ब्राउज़र ने चेकआउट पृष्ठ के लिए एक सुरक्षा त्रुटि उत्पन्न की। मैं आपको बता नहीं सकता कि वास्तव में क्यों।

हमारा मेजबान (साइट ग्राउंड) इसका पता नहीं लगा सका।

अंतिम समाधान करीब था, लेकिन user968421 के उत्तर (साइड नोट: साइड ओपी के विपरीत) के लिए एक छोटा सा मोड़, मैं संबंधित पृष्ठ पर रीडायरेक्ट करने की कोशिश कर रहा था, न कि केवल मुखपृष्ठ पर इसलिए मैंने उपयोगकर्ता के संदर्भ से वापस रख दिया [ $1डोमेन के बाद] user6868421 जवाब देने के):

RewriteEngine on
RewriteRule (.*) https://newdomain.com/$1 [R=301,L]

एक होस्ट गेटोर लेख (हताश ​​समय, हताश उपायों, अमीर?) द्वारा सुझाए गए इस htaccess रीडायरेक्ट जनरेटर से ट्विस्ट मिला है।


2

इस तरह सरल और यह URL से नए डोमेन पर अनुगामी क्वेरी नहीं ले जाएगा।

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule .* https://www.newdomain.com/? [R=301,L]

कि वास्तव में मेरे लिए काम किया, नए डोमेन धन्यवाद Dsynmphony के लिए किसी भी स्लग गुजर बाहर के साथ एक समाधान की जरूरत है
फैसल महमूद अवान

1

होस्टल द्वारा सशर्त पुनर्निर्देशन का उपयोग करें Options -FollowSymLinksऔर AllowOverride -Optionsनिष्क्रिय करें यदि कुछ स्थानीय फ़ाइलों को भी परोसा जाना चाहिए:

नमूना .htaccess

# Redirect everything except index.html to http://foo
<FilesMatch "(?<!index\.html)$">
    Redirect 301 / http://foo/
</FilesMatch>

यह उदाहरण स्थानीय index.html की सेवा करेगा और अन्य सभी कर्मचारियों को नए डोमेन पर पुनर्निर्देशित करेगा।


1

नए डोमेन को मुखपृष्ठ करने के लिए सभी को पुनर्निर्देशित करने के लिए इस मेथोड को आज़माएं, मेरे लिए यह काम करता है:

RewriteCond %{HTTP_HOST} ^olddomain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule ^(.*)$ "https\:\/\/newdomain\.com\/" [R=301,L]

0

पिछले जवाब मेरे काम नहीं आए।

मैंने इस कोड का इस्तेमाल किया। यदि आप OSX का उपयोग कर रहे हैं, तो सही प्रारूप का उपयोग करना सुनिश्चित करें।

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?OLDDOMAIN\.com$ [NC]
RewriteRule (.*) http://www.NEWDOMAIN.com/ [R=301,L]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.