httpd.conf ভেরিয়েবল: $ {var} এবং% {var between এর মধ্যে পার্থক্য কী?


7

Httpd.conf এর মধ্যে ${var}এবং এর %{var}মধ্যে পার্থক্য কী ?

কিভাবে এবং কখন একজন ব্যবহার করবে ${}এবং %{}?

http://httpd.apache.org/docs/2.4/configuring.html উল্লেখ করেছে:

শেল এনভায়রনমেন্ট ভেরিয়েবলের Define এর সাথে সংজ্ঞায়িত ভেরিয়েবলের মানগুলি সিনট্যাক্স {{VAR} ব্যবহার করে কনফিগারেশন ফাইল লাইনে ব্যবহার করা যেতে পারে}

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html উল্লেখ করেছে:

সার্ভার-পরিবর্তনশীল: এইগুলি%% NAME_OF_VARIABLE AB ফর্মের পরিবর্তনশীল

এবং

পুনর্লিখনম্যাপ সম্প্রসারণ: এগুলি $ {মানচিত্রের নাম: কী | ডিফল্ট form ফর্মের সম্প্রসারণ}

${VAR}মোড_উইউরাইট নির্দেশিকা ছাড়া (রাইরাইটকন্ড, রাইরাইটরুলের মতো তবে রাইরাইটর্যাপ an / প্রাক্তন /(.*${} হিসাবে ব্যবহৃত রাইরাইটম্যাপ বিস্তৃতি ব্যতীত ) $ {উদাহরণম্যাপ: $ 1} ) ব্যতীত, httpd.conf এ সর্বত্র ব্যবহৃত হবে

SetEnvIfডাইরেক্টিভ ব্যবহার করে httpd.conf এ কোনও ভেরিয়েবল সেট একই httpd.conf- তে ব্যবহারের জন্য, ${var}যখন ভ্যারিয়েবলটি mod_rewrite নির্দেশকের সাথে ব্যবহার করা হবে, যেখানে ভেরিয়েবলটি ব্যবহৃত হবে তা ব্যতীত ব্যবহৃত হবে %{var}?

উত্তর:


5

Httpd.conf এ $ {var} এবং% {var between এর মধ্যে পার্থক্য কী?

বেশ কিছু। কোনও কঠোর এবং দ্রুত নিয়ম নেই যা বলে যে " $করায় এক্স, %ডায়া ওয়াই", কারণ তারা কোথায় এবং কীভাবে ব্যবহৃত হচ্ছে তার উপর নির্ভর করে তারা বিভিন্ন জিনিস করে।

_ Rew VAR} সর্বদা ব্যবহৃত হবে httpd.conf- এ, পরিবর্তে mod_rewrite নির্দেশিকা ছাড়া

না - কনফিগার জুড়ে প্রতিটি জায়গায় ${VAR}প্রতিস্থাপন হিসাবে প্রয়োগ করা হয় এমনকি একটি মোড_উরাইট সম্পর্কিত রেখায়। এগুলি কেবলমাত্র httpd বাইনারি বা নির্দেশকে প্রদত্ত বিকল্পটি ব্যবহার করে শুরুতে সংজ্ঞায়িত করা যেতে পারে ।-DDefine

এটি করা যেতে পারে কারণ এই ভেরিয়েবলগুলিতে একটি :অক্ষর থাকতে হবে না , তবে RewriteMapব্যবহারে অবশ্যই একটি :অক্ষর থাকতে হবে । এটি $কোনও দ্বন্দ্ব ছাড়াই চূড়ান্তভাবে বিভিন্ন উপায়ে ব্যবহারের অনুমতি দেয় - পার্সার দেখেন :এবং জানেন যে এটি প্রতিস্থাপন করার কথা নয়।

সেটডএনভিআইএফ ডাইরেক্টিভ ব্যবহার করে httpd.conf তে কোনও ভেরিয়েবল সেট করতে হবে, একই httpd.conf ব্যবহারের জন্য, যখন ভেরিয়েবলটি mod_rewrite নির্দেশকের সাথে ব্যবহার করা হয়, যেখানে ভেরিয়েবল% {var as হিসাবে ব্যবহৃত হত?

নং এনভায়রনমেন্ট ভেরিয়েবল ভেরিয়েবল মাধ্যমে সেট মত নয় -Dবা Define- তারা প্রতি অনুরোধ প্রসঙ্গ (যাদের আপনি বেশী সাথে এসেছেন সেটিং হয় সম্পূর্ণরূপে আলাদা করছি SetEnvIf), যে শুধুমাত্র নির্দিষ্ট নির্দেশনা ব্যবহার করবে। সমর্থিত যেখানে তাদের উল্লেখ করা হয়েছে - মোড_উইরায়েটে তারা যে %{ENV:variable}লগ আছে সেগুলি রয়েছে %{variable}eএবং অনেকগুলি নির্দেশাবলীর কাছে দেখতে লজিক চেক রয়েছে env=variable


সুতরাং, মূলত; এটি একটি বিভ্রান্তিকর গোলযোগ - গত কয়েক দশক ধরে ওয়েব সার্ভারের ইতিহাসের প্রমাণ। সম্ভবত মুখ্য বিষয় যা আপনাকে বিভ্রান্ত করছে তা হ'ল মোড_আরাইটের বাক্য গঠনটি কোনওভাবেই কনফিগারেশনের অন্য কোনও অংশে প্রসারিত হয় না; সব আলাদা। এগুলি থেকে মূল কথাটি হ'ল এই সমস্তটি বোঝার জন্য কোনও নিয়মকানুনের 'নিয়ম' নেই - $এক জায়গার অর্থ $অন্য জায়গার থেকে সম্পূর্ণ আলাদা কিছু ।

কয়েকটি সহজ রেফারেন্স পয়েন্ট:

  1. আপনি যদি আপাচি শুরু হওয়ার সাথে সাথে স্থিতিশীলভাবে কোনও ভেরিয়েবল সেট করতে খুঁজছেন তবে অ্যাপাচি স্টার্টআপে একবার ব্যবহার করুন Defineএবং ${VAR}প্রতিস্থাপন করুন। আপনি যখন বিকাশ এবং উত্পাদন পরিবেশের মধ্যে ভাগ করে কনফিগারেশন ফাইলের মতো কিছু করতে চান তখন এটি বেশিরভাগ ক্ষেত্রে কার্যকর - তবে এটি এর ব্যবহারের সাথে বিভ্রান্ত $হওয়ার দরকার নেই RewriteMap, যা সর্বদা একটি থাকে :
  2. যদি আপনি নির্দিষ্ট অনুরোধগুলিতে ভেরিয়েবলগুলির সাথে কাজ করার সন্ধান করছেন তবে পরিবেশের ভেরিয়েবলগুলি আপনার পরে যা রয়েছে - তবে আপনি কোনও নির্দিষ্ট নির্দেশাবলীর সাথে ব্যবহার করার সময় যে বাক্য গঠনটি ব্যবহার করতে পারেন সেগুলি সম্পর্কে আপনি অনুমান করতে পারবেন না। আপনাকে সেই নির্দেশের জন্য ডকুমেন্টেশন চেক করতে হবে।
  3. মোড_উইরাইট যখন প্রশ্নে থাকে তখন ভেরিয়েবল এবং তাদের সিনট্যাক্স সম্পর্কে আপনারা যা কিছু ভাবেন সেগুলি ফেলে দিন। এতে এর নিজস্ব ভেরিয়েবলগুলির একটি সেট রয়েছে %{VAR}, আপনি আপনার 'সাধারণ' এনভায়রনমেন্ট ভেরিয়েবল এর সাথে পেতে পারেন %{ENV:VAR}এবং এর সাথে আপনি পরিবেশের ভেরিয়েবল সেট করতে পারেন [E=VAR]

কি দারুন! এত দীর্ঘ লেখার জন্য ধন্যবাদ! এটি হজম করতে আমার কিছুটা সময় লাগবে। বেশ আশ্চর্যের বিষয় যে অ্যাপাচি ডক্স এক জায়গায় এটি নথিভুক্ত করে না, এটি অবশ্যই নবাগত প্রচুর ক্ষেত্রে বিভ্রান্তিকর হতে হবে।
এক্স 10

হ্যাঁ - তাদের দস্তাবেজগুলি নির্দিষ্ট ধারণাগুলির জন্য খারাপ নয়, তবে এর মতো 'বড় চিত্র' জিনিসগুলি খুব কম পরিষ্কার clear
শেন ম্যাডেন

1

আমি মোড_উইরাইটের উত্স কোডটি দেখেছি এবং মন্তব্যগুলিতে নোটগুলি পেয়েছি (do_expand ফাংশন):

        /* variable lookup */
        else if (*p == '%') {
        ...
        /* map lookup */
        else {     /* *p == '$' */

সুতরাং দেখে মনে হচ্ছে% হ'ল ভেরিয়েবলের জন্য, আর has হ্যাশ টেবিলগুলিতে ("মানচিত্র") দেখার জন্য। এছাড়াও, সমস্ত মোড_আরাইটের বিস্তৃতি সম্পূর্ণরূপে মূল থেকে স্বাধীন হয় - সম্পূর্ণ সম্প্রসারণ নিজেই মডিউলে সম্পন্ন হয়।

আমার আগে চিন্তা করা হয়েছিল, তবে এটি ভুল ছিল:

{} ওয়ারগুলি প্রকল্পের পরিবেশ ব্যবহার করে এবং কনফিগার পার্সের সময় মূল্যায়ন করা হয়।

% {} ভারগুলি অনুরোধের পরিবেশ ব্যবহার করে এবং সময় অনুরোধটিকে পার্স করার সময় মূল্যায়ন করা হয়। মোড_উইউরাইট httpd কোর দ্বারা তৈরি কনফিগার-সময় প্রবণতা রোধ করতে% {} সিমেটিক ব্যবহার করে।


ধন্যবাদ, আপনি কি দয়া করে এর জন্য মূল ডকুমেন্টেশনের লিঙ্কটি অন্তর্ভুক্ত করতে পারেন এবং যদি সম্ভব হয় তবে একটি টিউটোরিয়ালের লিঙ্ক?
এক্স 10

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