अपाचे कई शर्तों को फिर से लिखना


9

मेरे पास एक वेबसाइट है जो एक पुराने डोमेन नाम (जैसे olddomain.com) से एक नए डोमेन नाम (जैसे newdomain.com) पर माइग्रेट हुई है।

एसईओ कारणों से, मुझे प्राथमिक नए डोमेन नाम (जैसे www.newdomain.com) पर सभी वेबसाइट ट्रैफ़िक को फिर से लिखना होगा। दुर्भाग्य से, मैं नहीं जानता कि कैसे कई या प्रकार को फिर से लिखना है। ऐसा लगता है कि सभी शर्तों के साथ, नीचे नमूना कोड, मुझे एक और स्थिति मिलती है।

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName newdomain.com
        ServerAlias www.newdomain.com
        ServerAlias olddomain.com
        ServerAlias www.olddomain.com
        DocumentRoot /var/www/newdomain.com/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

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

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

क्या कोई मुझे थोड़ी सहायता दे सकता है? किसी भी तरह की सहायता का स्वागत किया जाएगा।

जवाबों:


16

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

समाधान # 1 : की जगह [NC]से [NC,OR]मूल कोड के पहले 2 RewriteCond लाइनों में। डिफ़ॉल्ट रूप से एक रेवेरिटकॉन्ड तार्किक द्वारा दूसरे रेवेरिटकॉन्ड से जुड़ा हुआ है AND। यह अपाचे को ORतर्क का उपयोग करने का निर्देश देगा :

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

समाधान # 2 : चूंकि आपके पास कुल 4 डोमेन नाम हैं, इसलिए विपरीत दृष्टिकोण का उपयोग करना बहुत आसान होगा - किसी भी डोमेन से रीडायरेक्ट को सही करने के लिए:

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

समाधान # 2 बेहतर है, हालांकि अगर आप मिल गए हैं www.newdomain.comऔर test.newdomain.comया ऐसा कुछ है, तो यह तब तक मैच करना बेहतर हो सकता है !newdomain.com$जब तक कि पुराने डोमेन "newdomain.com" जैसे "thisisanoldnewdomain.com" में समाप्त न हो। # 1 के साथ इस बिंदु पर अधिक, मुझे कहीं भी प्रलेखित [या] नहीं मिल सकता है। क्या यह वास्तव में काम करता है?
DerfK

@DerfK डॉक्स - आपको काफी स्क्रॉल करना होगा: "'ornext | OR' (या अगली शर्त) इसका उपयोग नियम शर्तों को स्थानीय के साथ संयोजित करने के लिए करें या इसके बजाय निहित करें।"
लेज़ऑन

1

बस यह उद्धरण मिला:

rewriteConds केवल उन एकल पुनर्लेखनों पर लागू होते हैं जो उनका अनुसरण करते हैं।

यहाँ: http://www.webmasterworld.com/apache/3350200.htm

यहाँ मेरे लिए काम कर समाधान है:

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

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

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

1
किसी और के लिए एक नोट के रूप में यहाँ वर्षों बाद, LazyOne द्वारा प्रस्तावित समाधान (और ओपी द्वारा स्वीकार) कहीं अधिक अनुकूलित है, खासकर यदि आपके पास ORएक साथ सिर्फ दो या तीन से अधिक स्थितियां हैं।
डॉकटोर जे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.