এইচটিটিপি হোস্টের উপর ভিত্তি করে ভেরিয়েবল সেট করতে আমি কীভাবে সেটইনভিআইএফ ব্যবহার করতে পারি?


11

আমি আপাচে একটি ভেরিয়েবল সেট করার চেষ্টা করছি

ENV = DEV যদি http হোস্টটি ডেভ ইউআরএল হয়

অথবা

ENV = PRD যদি http হোস্টটি prd URL হয়

এবং তারপরে কিছু যুক্তিযুক্ত শাখা তৈরি করতে $ _SERVER ['ENV'] ব্যবহার করুন

এখনও অবধি এগুলির কোনওটিই আমার পক্ষে কাজ করেনি এবং আমাদের কাছে Setenvif মডিউল ইনস্টল আছে

SetEnvIfNoCase Referer
SetEnvIfNoCase Remote_Host

এটি করার সঠিক উপায় কী?

উত্তর:


15

ডকুমেন্টেশনটি একবারে তদারকি করা :

SetEnvIf নির্দেশিকা অনুরোধের বৈশিষ্ট্যের উপর ভিত্তি করে পরিবেশের পরিবর্তনশীলগুলি সংজ্ঞায়িত করে। প্রথম যুক্তিতে বর্ণিত বৈশিষ্ট্যটি তিনটি জিনিসের মধ্যে একটি হতে পারে:

একটি HTTP অনুরোধ শিরোনাম ক্ষেত্র (এ সম্পর্কিত আরও তথ্যের জন্য RFC2616 দেখুন); উদাহরণস্বরূপ: হোস্ট, ব্যবহারকারী-এজেন্ট, রেফারার এবং স্বীকৃত ভাষা। অনুরোধ শিরোনামগুলির সেট নির্দিষ্ট করতে একটি নিয়মিত অভিব্যক্তি ব্যবহার করা যেতে পারে।

সুতরাং, Hostশিরোনামে পরিবেশের পরিবর্তনশীল শর্তসাপেক্ষ করা অবশ্যই সম্ভব । দেখে মনে হচ্ছে আপনি উভয়ই শিরোনাম Refererবা Remote_Hostশিরোলেখ ব্যবহার করার চেষ্টা করছেন যা উভয়ই আপনার পছন্দ মতো নয় (যদিও তাত্ত্বিকভাবে বেশিরভাগ ক্ষেত্রেই শিরোনামের Refererমান থাকতে হবে Host)। অনুরোধ করা ক্লায়েন্টেরRemote_Host হোস্ট-নেম হবে যা আপনি যা চান তা একেবারেই নয় (এবং বেশিরভাগ কনফিগারেশনে কেবল সহজলভ্য হবে না, কারণ কার্য সম্পাদনের কারণে ডিএনএস লুকআপ বন্ধ করা সাধারণ)।

এরকম কিছু চেষ্টা করুন:

SetEnvIf Host "www-dev\.example\.com" ENV=DEV
SetEnvIf Host "www-production\.example\.com" ENV=PRD

... এবং তারপরে কিছু যুক্তিযুক্ত শাখা তৈরি করতে $ _SERVER ['ENV'] ব্যবহার করুন

তবে আরও মনে রাখবেন যে আপনি Hostএই চিকনারিটি ছাড়াই সরাসরি পিএইচপি-তে সরাসরি শিরোনামের মান উল্লেখ করতে পারেন ; $_SERVER['HTTP_HOST']আপনি যা চান ঠিক তাই হবে


সুন্দর। এটি আমাকে নির্দিষ্ট হোস্টের সাথে সংযোগ করার সময় পাসওয়ার্ডগুলির প্রয়োজনের জন্য কাস্টম বিধিগুলি লিখতে দেয়, তবে অন্যগুলি নয় (অর্থাত্, যখন কোনও ভিএম একাধিক অ্যামাজন ইসি 2 ইনস্ট্যান্সে ক্লোন করা হয় তবে কাস্টম শেফ রেসিপিগুলি লিখবেন না) the কার্যকারীতা, যদি সন্ধান করা শক্ত হয় তবে খুব দরকারী।
এরিক এল।

1
SetEnvIfডক্স বলে যে 3 য় PARAM একটি Regex, ডোমেন নামে বিন্দু নয় ব্যাকস্ল্যাশ সঙ্গে পলান হওয়া উচিৎ? অথবা ডাবল উদ্ধৃতিতে মানটি উদ্ধৃত করা আপাচি একে স্ট্রিং আক্ষরিক হিসাবে বিবেচনা করে?
jakub.g

@ জাকুব। হ্যাঁ, এগুলি একটি রেজেক্স এবং এড়াতে হবে। এই ক্ষেত্রে, যেহেতু বিন্দু কোনও একক অক্ষরের "www-dev.example.com"সাথে মেলে , তাই একটি রেজিওস অপ্রত্যাশিত হোস্টনামগুলির সাথেও মিলবে, যেমন www-dev-example.com। আপনি প্রত্যাশিত ম্যাচগুলি এবং আরও অনেক কিছু পাবেন। আমি এখন উদাহরণ আপডেট করেছি।
মার্টিজন হিমেলস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.