এনগিনেক্স সহ ইউআরএল থেকে ট্রেলিং স্ল্যাশ সরানো


14

আমি আমার সাইটে নিম্নলিখিত URL গুলি সমতুল্য হতে চাই:

/foo/bar
/foo/bar/
/foo/bar/index.html

এবং আরও আমি দ্বিতীয় দুটি ফর্মটি HTTP 301 প্রথম ফর্মটিতে পুনঃনির্দেশ জারি করতে চাই। আমি কেবল স্থির পৃষ্ঠাগুলি পরিবেশন করছি এবং সেগুলি তৃতীয় ফর্ম অনুসারে সাজানো হয়েছে। (অন্য কথায়, কোনও ব্যবহারকারী যখন অনুরোধ করেন /foo/barতখন তাদের ফাইলটি নেওয়া উচিত /usr/share/.../foo/bar/index.html)।

আমার nginx.confবর্তমানে নিম্নলিখিত রয়েছে:

rewrite ^(.+)/$ $1 permanent;
index index.html;
try_files $uri $uri/index.html =404;

এটি এর জন্য অনুরোধগুলির জন্য কাজ করে /foo/bar/index.html, তবে যখন আমি অনুরোধ করি /foo/barবা /foo/bar/সাফারি আমাকে বলে যে "অনেকগুলি পুনর্নির্দেশ হয়েছে" - আমি ধরে নিই একটি অসীম পুনর্নির্দেশ লুপ বা এর মতো কিছু রয়েছে। আমি বর্ণিতভাবে ফাইলগুলিতে ইউআরএলগুলি ম্যাপ করার জন্য কীভাবে এনজিনেক্স পেতে পারি?

সম্পাদনা করুন: আমার সম্পূর্ণ কনফিগারেশন

এখানে আমার সম্পূর্ণরূপে nginx.confআমার ডোমেন নাম "উদাহরণ.com" এর সাথে প্রতিস্থাপিত হয়েছে।

user www-data;
worker_processes 1;
pid /run/nginx.pid;

events {
  worker_connections 768;
}

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  server_tokens off;

  server_names_hash_bucket_size 64;

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss application/atom+xml text/javascript image/svg+xml;

  server {
    server_name www.example.com;
    listen 80;
    return 301 $scheme://example.com$request_uri;
  }

  server {
    server_name example.com 123.45.67.89 localhost;
    listen 80 default_server;

    # Redirect /foobar/ to /foobar
    rewrite ^(.+)/$ $1 permanent;

    root /usr/share/nginx/www/example.com;
    index index.html;
    try_files $uri $uri/index.html =404;

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    location = /50x.html {
      root /usr/share/nginx/html;
    }
  }
}

এই ফাইলগুলি আসলে ফাইল সিস্টেমে বিদ্যমান?
মাইকেল হ্যাম্পটন

@ মিশেলহ্যাম্পটন অনুরোধগুলির জন্য /foo/bar/index.htmlফাইলটি /usr/share/nginx/www/foo/bar/index.htmlসেট আপ করা সত্ত্বেও ফেরত দেওয়া উচিত । ওয়েবসাইটের সমস্ত পাথ সরাসরি ফাইল সিস্টেমের পাথের সাথে সম্পর্কিত।
বিডিশাম

@ বিডিশাম আমি পুনরুত্পাদন করতে পারি না। আমি এখানে আপনার কনফিগার পেস্ট.বুন্টু.com
অ্যালেক্সি টেন

পছন্দ করুন ধন্যবাদ এটার মধ্যে দেখার জন্য। আমি একটি কনফিগারেশন পোস্ট করেছি যা আমার জন্য কাজ শেষ করে।
বিডেশম

উত্তর:


19

আপনার serverব্লকে এই রেজেেক্স থাকা :

rewrite ^/(.*)/$ /$1 permanent;

সমস্ত ট্রেলিং স্ল্যাশ ইউআরএলগুলি সম্পর্কিত নো ট্রেলিং স্ল্যাশে পুনর্নির্দেশ করবে।


1
এটি প্রশ্নের একমাত্র অংশকে সম্বোধন করে।
বিডেশাম

5
এটি প্রশ্নের পুরো শিরোনাম সম্বোধন করে।
জীবন

5

আমি এটিকে serverআমার কনফিগারেশনের চূড়ান্ত ব্লক হিসাবে ব্যবহার করে আমার কাঙ্ক্ষিত আচরণ পেতে সক্ষম হয়েছি:

server {
  server_name example.com 123.45.67.89 localhost;
  listen 80 default_server;

  # Redirect /foobar/ and /foobar/index.html to /foobar
  rewrite ^(.+)/+$ $1 permanent;
  rewrite ^(.+)/index.html$ $1 permanent;

  root /usr/share/nginx/www/example.com;
  index index.html;
  try_files $uri $uri/index.html =404;

  error_page 404 /404.html;
  error_page 500 502 503 504 /50x.html;

  location = /50x.html {
    root /usr/share/nginx/html;
  }
}

এটি আমার পক্ষে কাজ করে বলে মনে হচ্ছে না - /index.htmlURL টি পুনঃনির্দেশের পরিবর্তে HTTP 200 দিয়ে উত্তর দেওয়া হয়েছে; "পুনর্লিখন" লাইন উপেক্ষা করা হয়। এটি কি এখনও বর্তমান?
ক্রিস্টোফ বার্সকা

1

পুনর্লিখনটি কখনই ব্যবহার করবেন না:

  location ~ (?<no_slash>.*)/$ {
       return 301 $scheme://$host$no_slash;
  }

পুনর্লিখনকে একটি ভাল ধারণা বলে আপনি কেন ভাবেন না সে সম্পর্কে আপনি প্রসারিত করতে পারেন?
বিডিশাম


আপনার লিঙ্কগুলি পুনরায় লেখাগুলি এড়িয়ে যাওয়ার পরামর্শ দেওয়ার কারণটি হ'ল উন্নত সামর্থ্যের জন্য, কারণ এগুলি অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া সৃষ্টি করতে পারে। আপনার উত্তরটি খুব কম পঠনযোগ্যrewrite ^(.+)/+$ $1 permanent;
chrBrd

1
এটি একটি উত্তরের উত্তর, কেন জানি কেন এটি নিম্নচোটিত। নিবন্ধটির শিরোনাম "ট্যাক্সিং পুনর্লিখন" রয়েছে যা ব্যাখ্যা করে যে কেন rewriteখারাপ হতে পারে। বলা হচ্ছে, প্রদত্ত উত্তরের সাথে ইউআরআই ক্যাপচার এবং মিলও হয়, পারফরম্যান্সের উন্নতি হবে কিনা তা আমি নিশ্চিত নই, এটির পরীক্ষার প্রয়োজন। (?<no_slash>.+)/$হোম পৃষ্ঠাটি পুনর্নির্দেশ না করার পরিবর্তে এই রেজেক্স ব্যবহার করুন ।
রেজার

0
if ($request_uri ~ (.*?\/)(\/+)$ ) {
return 301 $scheme://$host$1;
}

এই নিয়মটি যেকোন সংখ্যক ট্রেলিং স্ল্যাশগুলির যত্ন নেবে এবং URL টি ধরে রাখবে retain এটি বেস ইউআরএল ট্রেলিং স্ল্যাশগুলিরও যত্ন নেবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.