অ্যাপাচি একাধিক শর্ত পুনর্লিখন


9

আমার একটি ওয়েবসাইট রয়েছে যা একটি পুরানো ডোমেন নাম (যেমন।

এসইও কারণে, আমার ওয়েবসাইটের সমস্ত ট্র্যাফিকের নতুন নতুন ডোমেন নাম (যেমন 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$যতক্ষণ না "thisisanoldnewdomain.com" এর মতো "newdomain.com" এ পুরানো ডোমেনটি শেষ হয় না, ততক্ষণ তার সাথে ম্যাচ করা ভাল । # 1 দিয়ে আরও উল্লেখযোগ্য বিষয় হ'ল আমি আর [OR] নথিভুক্ত কোথাও খুঁজে পাচ্ছি না। এটা কি সত্যিই কাজ করে?
ডায়্পফেকে

@ ডারফকে ডক্স - আপনাকে বেশ কিছুটা স্ক্রোল করতে হবে: "'অরনেক্সট | ও' (বা পরবর্তী শর্ত) নিয়মের শর্তগুলি স্থানীয় বা এর সাথে অন্তর্ভুক্ত ও এর পরিবর্তে একত্রিত করতে এটি ব্যবহার করুন" "
LazyOne

1

সবেমাত্র এই উদ্ধৃতিটি পাওয়া গেছে:

পুনর্লিখনকন্ডগুলি কেবলমাত্র একক পুনর্লিখনের ক্ষেত্রে প্রয়োগ হয় যা সেগুলি অনুসরণ করে।

এখানে: 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একসাথে কেবল দু'তিনটি শর্ত বেশি থাকে।
ডক্টর জে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.