এনজিআইএনএক্সে কীভাবে কোনও ইউআরএল পুনর্নির্দেশ করবেন


135

আমার প্রত্যেককে পুনর্নির্দেশ করা দরকার http://test.com.com অনুরোধটি http://www.test.com এ । কিভাবে এই কাজ করা যেতে পারে.

সার্ভার ব্লকে আমি যুক্ত করার চেষ্টা করেছি

 rewrite ^/(.*) http://www.test.com/$1 permanent;

কিন্তু ব্রাউজারে এটি বলে

  The page isn't redirecting properly

  Firefox has detected that the server is redirecting the request for 
  this address in a way that will never complete.

আমার সার্ভার ব্লকটি দেখতে মনে হচ্ছে

 server {
            listen       80;
            server_name  test.com;
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            #rewrite ^/(.*) http://www.test.com/$1 permanent;
            #rewrite ^(.*)$ $scheme://www.test.com$1;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }

অফিশিয়াল ডকুমেন্টেশনটি হ'ল: nginx.org/en/docs/http/converting_rewrite_rules.html
মার্সেলো

উত্তর:


274

আপনি যা চান তা করার সর্বোত্তম উপায় হ'ল অন্য সার্ভার ব্লক যুক্ত করা:

server {
        #implemented by default, change if you need different ip or port
        #listen *:80 | *:8000;
        server_name test.com;
        return 301 $scheme://www.test.com$request_uri;
}

এবং নিম্নলিখিত হিসাবে আপনার প্রধান সার্ভার ব্লক সার্ভার_নাম ভেরিয়েবল সম্পাদনা করুন:

server_name  www.test.com;

গুরুত্বপূর্ণ : নতুন serverব্লক এটি করার সঠিক উপায়, ifমন্দifএটি সম্ভব হলে পরিবর্তে আপনাকে অবশ্যই অবস্থান এবং সার্ভার ব্যবহার করতে হবে use Rewriteকখনও কখনও মন্দ হয় , তাই এটি দিয়ে প্রতিস্থাপন return


19
আপনি return 301 http://wwww.test.com$request_uri;পুনরায় লেখার পরিবর্তে সেই সার্ভার ব্লকটিও শেষ করতে পারেন ।
আরসিসোলা

6
Ditto @RCCola এর returnপরিবর্তে ব্যবহার করুন rewriteদস্তাবেজগুলি
জে কটন

প্রশ্ন, সার্ভার ব্লকগুলি কীভাবে অর্ডার করা উচিত? redirectতারপর main serverঅবরোধ করা বা main serverব্লক তারপর redirect? কারণ আমি একই সমস্যা আছে, stackoverflow.com/questions/35451929/...
jhnferraris

উল্লিখিত প্রশ্নের মধ্যে এনগিনেক্স কনফিগারেশন সঠিক, অর্ডার কোনও বিষয় নয়।
দিমিত্রি ভারহাতুরভ

4
কেবলমাত্র একটি দ্রুত সতর্কতা: 301বনাম পুনঃনির্দেশের দিকে নজর রাখুন 302। আপনি ক্যাশেড স্থায়ী পুনঃনির্দেশের সাথে আটকে থাকতে পারেন, যা ইতিমধ্যে কোনও ইউআরএল অ্যাক্সেস করেছে এমন ক্লায়েন্টদের জন্য আপনার সেটিংস পরিবর্তন করা খুব ঝামেলা করে। (আমি জানি ওপি একটি চেয়েছিল 301, তবে নিশ্চিত হয়েছি যে এটি আপনি যা চান তা সত্যই।)
নিক মেরিল

16

এখানে অন্য উত্তরের মতো, তবে পুনর্লিখনের এইচটিপি-কে এই জাতীয় স্কিমে পরিবর্তন করুন:

server {
        listen 80;
        server_name test.com;
        rewrite     ^ $scheme://www.test.com$request_uri? permanent;
}

এবং নিম্নলিখিত হিসাবে আপনার প্রধান সার্ভার ব্লক সার্ভার_নাম ভেরিয়েবল সম্পাদনা করুন:

server_name  www.test.com;

Www.test.com কে test.com এ ডাইরেক্ট করতে আমাকে এই কাজটি করতে হয়েছিল।


9

প্রথমে নিশ্চিত করুন যে আপনি এইচটিটিপি পুনর্লিখন মডিউলটি দিয়ে এনগিনেক্স ইনস্টল করেছেন। এটি ইনস্টল করতে আমাদের পিসিআর-লাইব্রেরি থাকা দরকার

পিসিআর লাইব্রেরি কীভাবে ইনস্টল করবেন

যদি উপরে বর্ণিত কাজটি সম্পন্ন হয় বা আপনার যদি ইতিমধ্যে তা থাকে তবে কেবলমাত্র আপনার এনজিনেক্স সার্ভার ব্লকে নীচের কোডটি যুক্ত করুন

  if ($host !~* ^www\.) {
    rewrite ^(.*)$ http://www.$host$1 permanent;
  }

প্রতিটি অনুরোধ থেকে www অপসারণ করতে আপনি ব্যবহার করতে পারেন

  if ($host = 'www.your_domain.com' ) {
   rewrite  ^/(.*)$  http://your_domain.com/$1  permanent;
  }

সুতরাং আপনার সার্ভার ব্লক দেখতে হবে

  server {
            listen       80;
            server_name  test.com;
            if ($host !~* ^www\.) {
                    rewrite ^(.*)$ http://www.$host$1 permanent;
            }
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }

2

এটি "এনগিনেক্স পুনর্নির্দেশ" এর জন্য গুগলের শীর্ষে হিট। আপনি যদি এখানে কেবলমাত্র একটি একক অবস্থান পুনঃনির্দেশ করতে চেয়েছিলেন:

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.