আমি কীভাবে এনজিনেক্সে এমন একটি অবস্থান তৈরি করতে পারি যা কোনও ট্রেলিং স্ল্যাশ ছাড়াই এবং এর সাথে কাজ করে?


46

এই মুহূর্তে আমার কাছে এই কনফিগারটি রয়েছে:

location ~ ^/phpmyadmin/(.*)$
{
        alias /home/phpmyadmin/$1;
}

তবে, আমি যদি পরিদর্শন করি www.mysite.com/phpmyadmin(পিছনে স্ল্যাশের অভাবটি দ্রষ্টব্য), এটি আমি 404 যা খুঁজছি তা তা খুঁজে পাবে না I আমি ধরে নিয়েছি কারণ আমি পিছনে স্ল্যাশ অন্তর্ভুক্ত করি না। আমি এটা কিভাবে ঠিক করবো?


2
আমি জানি এই প্রশ্নটি বেশ পুরানো, তবুও আমি গৃহীত উত্তরটি পরিবর্তন করার প্রয়োজনীয়তার উপর জোর দিতে চাই। অনভিজ্ঞ ব্যবহারকারী (যারা এই জাতীয় QAs অনুসন্ধান করবেন) বর্তমানে গৃহীত উত্তর ব্যবহার করে সুরক্ষা গর্ত তৈরি করতে পারে।
বোজি

উত্তর:


34

আপনি যে নিয়মিত এক্সপ্রেশনটি ব্যবহার করছেন তা হতে পারে -

location ~ ^/phpmyadmin/(.*)$

উপরের সাথে / phpmyadmin /, / phpmyadmin / অন্য কিছু / এখানে মিলবে, তবে এটি phpmyadmin এর সাথে মেলে না কারণ নিয়মিত অভিব্যক্তিতে পিছনের স্ল্যাশ অন্তর্ভুক্ত রয়েছে।

আপনি সম্ভবত এরকম কিছু চান:

location ~ /phpmyadmin/?(.*)$ {
    alias /home/phpmyadmin/$1;
}

প্রশ্ন চিহ্নটি একটি নিয়মিত অভিব্যক্তি পরিমাণ n

সতর্কতা: সম্ভাব্য সুরক্ষা ঝুঁকি হিসাবে সম্প্রদায়টি এই সমাধানটি দেখেছিল


ধন্যবাদ! এবং ব্যাখ্যার জন্য আপনাকে ধন্যবাদ। ভবিষ্যতে কাজে আসবে।
রব

15
প্যাটার্নটি বেশ সঠিক নয়। এটি "/ phpmyadmin1234" এর মতো পথের সাথেও মেলে, সম্ভবত আপনি যা চান তা তা নয়। @ কেবিইকের সমাধানটি সঠিক।
মায়ো

3
এটিকে স্পষ্টভাবে নিম্নোক্ত করার জন্য আমি দুঃখিত, তবে @ নীচের মন্তব্যটি অবহেলা করার গুরুত্বপূর্ণ উপায় । এটি কোনও ভুল কনফিগার্ড ওয়েবসারভারের দিকে পরিচালিত করতে পারে যার মধ্যে সুরক্ষা গর্ত থাকতে পারে।
ড্যানিয়েল এফ

34

আরও ভাল সমাধান:

location ~ ^/phpmyadmin(?:/(.*))?$ {
    alias /home/phpmyadmin/$1;
}

নিশ্চিত করুন যে সার্ভারের /home/phpmyadminপ্রথমে অনুমতি রয়েছে ।


গৃহীত উত্তরের সাথে পার্থক্যের ব্যাখ্যা:

এটি নিয়মিত প্রকাশের সমস্ত বিষয় ।

প্রথমত, ^চরটির অর্থ হল আপনি স্ট্রিংয়ের শুরু থেকে কোনও জায়গায় মাঝখানে নয় match $শেষ স্ট্রিং শেষে মিলে মানে হয়।

এর (?:)অর্থ নন-ক্যাপচারিং গ্রুপ - ক্যাপচারিং ফলাফলগুলিতে আমরা এটি চাই না, তবে আমরা কয়েকটি গ্রুপকে সহজ গ্রুপ করতে চাই। আমরা এটির মতো /গোষ্ঠীভূত করি, কারণ আমরা চাই চারটি শিশু পথের একটি গুরুত্বপূর্ণ অংশ হয়ে উঠি, এবং পিতামাতার পথের উল্লেখযোগ্য অংশ নয়।


কেন এটা ভাল?
মেকোহি

2
@ মাও এর উত্তর স্বীকৃত উত্তরে জানিয়েছিলেন
কেবিসি

2
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
Yonn Trimoreau

@ মেকোহি আমি ব্যাখ্যা লিখেছি
কেবিইকে

8

আপনি শুধু ব্যবহার করবেন না কেন

location /phpmyadmin {
    alias /home/phpmyadmin;
}

?


কারণ এটি আমার পক্ষে কাজ করে না। এখানে দেখুন: serverfault.com/questions/375602/…
রব

1
@ রব আপনি কি aliasনির্দেশের পিছনে পিছনে ছাড়াই চেষ্টা করেছেন ?
শেন ম্যাডেন

এটি আসলে এটির সঠিক উত্তর এবং সঠিক উপায়। কেবল পিছনের স্ল্যাশকে বাদ দিন এবং এটি পিছনে স্ল্যাশ ছাড়া এবং উভয়ই টাইপ করা url গুলির জন্য কাজ করে। এনগিনেক্সে কিছু জটিল করার দরকার নেই এটি সহজ, জটিল রেইজেক্স এবং অন্যান্য মজার বিষয়গুলি কেবল এনগিনেক্সকে ধীর করবে।
মিচেলকে

4
এটির সাথে সমস্যাটি হ'ল এটির সাথে /phpmyadminblahblahblahblahবা অন্য কোনও সংমিশ্রণটিও মিলবে
গ্যারি গ্রিন

6

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে গুগলের মাধ্যমে এখানে যে কারও কাছে, আমি নিম্নলিখিত পদ্ধতিটি সমাধান করেছি (@ কেবিসির একের প্রকরণ, যা বেশ ভাল ছিল):

location ~ ^/foo(/.*)?$ {
  proxy_pass http://$backend$1$is_args$args
}

এটি যে কোনও প্রকারের ধারণাকে ক্যাপচার করবে /fooএবং এটিকে /barঅন্য ইউআরএলে (প্যারামিটার সহ) পুনর্নির্দেশ করবে । আমি সঙ্গে এটি দেখাচ্ছে am proxy_passনির্দেশ কিন্তু এটি দিয়ে কাজ করবে alias

  • /foo -> /bar
  • /foo/ -> /bar/
  • /foo/sub -> /bar/sub
  • /foo/sub1/sub2/?param=value -> /bar/sub1/sub2/?param=value

এটি কাজ করে কারণ $1allyচ্ছিকভাবে সাবস্রোর্স প্লাস নেতৃস্থানীয় স্ল্যাশ ক্যাপচার করবে, সুতরাং এটি পছন্দ মতো জিনিস ক্যাপচার করবে না /fooextra/। এটি উপস্থিত বা অ-উপস্থিত শেষের স্ল্যাশ সঠিকভাবে পুনর্নির্দেশ করবে।


1
প্রক্সি_পাস ব্যবহার করতে চাওয়ার কোণার ক্ষেত্রে বিবেচনা করার জন্য ধন্যবাদ এবং এইভাবে যুক্তিগুলির যত্নশীল। আপনি আমার উপন্যাস আছে।
ড্যানিয়েল এফ

2

এই পুনঃনির্দেশটি কেবল পিছনে থাকা স্ল্যাশ সহ এবং ছাড়া URL গুলি পুনরায় লেখবে। স্ল্যাশের পরে যা কিছু আসে তা ওভাররাইট করা হবে না।

ডোমেইন.com/
location => ডোমেনে
পুনঃনির্দেশ

server {
  # 301 URL Redirect
  rewrite ^/location/?$ /new/location permanent;
}

1

আপনি কি try_filesনির্দেশ ব্যবহার করার চেষ্টা করেছেন ?

try_files $uri $uri/ =404;

0

আমি এটা এরকম করেছিলাম

rewrite ^/promo/?$     http://example.com/promo/page43902.html;
location /promo/ {
    root /var/www;
}

0

কেন কেবল দুটি পুনর্লিখন সহজভাবে রাখেন না:

location ~ ^/phpmyadmin
{
    rewrite /phpmyadmin /home/phpmyadmin/ break;
    rewrite /phpmyadmin/(.*) /home/phpmyadmin/$1 break;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.