আমি অ্যাপাচি 2 ডায়নামিক ভোস্ট ফ্যালব্যাকের জন্য এই প্রশ্নটিও গুগল করতে পেরেছিলাম এবং লুসের উত্তর আমার সমস্যা সমাধানে আমাকে অনেক সহায়তা করেছে, তবে আমি এখনও আমার লক্ষ্য অর্জনে কী করেছি তা দেখাতে চাই মূলত কারণ এটি কিছু অতিরিক্ত কাজ জড়িত এবং কারণ আমি এটি মনে করি ভবিষ্যতের যে কোনও গুগলারের জন্য সহায়ক হতে পারে ...
আমার লক্ষ্য
- আমার ভিপিএসের দিকে নির্দেশ করে সমস্ত ডোমেন এবং সাবডোমেনগুলির জন্য ডায়নামিক ভোস্টিং
foo.com হিসাবে একই বিষয়বস্তু পরিবেশন করা উচিত www.foo.com
- কোনও ধরণের ডিফল্ট অজানা ডোমেনগুলির জন্য ফলব্যাক
- অজানা সাবডোমেন জন্য ফলব্যাক
foo.comকরতে www.foo.comযদি না wwwপাওয়া যায় না, ফলব্যাক পরিবর্তে ডিফল্ট
ডিএনএস
আমার কয়েকটি ডোমেন (এবং তাদের সমস্ত সাবডোমেন) আমার ভিপিএসের দিকে নির্দেশ করছে, উদাহরণস্বরূপ:
- foo.com
- bar.com
- foobar.com
নথি ব্যবস্থা
আমার কাছে নিম্নলিখিত ডিরেক্টরি রয়েছে, ডোমেনগুলিতে উপলব্ধ সাবডোমেনগুলির নামের সাথে ডিরেক্টরি রয়েছে, www ডিরেক্টরিটি প্রয়োজন, তবে কনফিগারেশনটি যেখানে উপস্থিত নেই সেখানে পরিস্থিতি মোকাবেলা করতে সক্ষম হওয়া উচিত। লোকালহোস্ট ডিফল্ট ফ্যালব্যাক হিসাবে ব্যবহৃত হয়:
/var
/www
/localhost
/foo.com
/www
/bar
/bar.com
/foo
টেস্ট
আমার লক্ষ্যগুলি পরীক্ষারযোগ্য ক্ষেত্রে অনুবাদ করা:
- foo.com foo.com/www থেকে পরিবেশন করা উচিত
- www.foo.com থেকে পরিবেশিত হবে foo.com/www
- bar.foo.com থেকে পরিবেশিত হবে foo.com/bar
- foo.foo.com থেকে পরিবেশিত হবে foo.com/www (foo.com/foo অস্তিত্ব নেই)
- বার ডট কম লোকালহোস্ট থেকে পরিবেশন করা উচিত (বার.com/www উপস্থিত নেই)
- www.bar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (বার.com/www উপস্থিত নেই)
- foo.bar.com বার.com/ foo থেকে পরিবেশন করা উচিত
- বার.বার.কমকে লোকালহোস্ট থেকে পরিবেশন করা উচিত (বার / বারের অস্তিত্ব নেই)
- foobar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (foobar.com বিদ্যমান নেই)
- www.foobar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (foobar.com বিদ্যমান নেই)
- foo.foobar.com লোকালহোস্ট থেকে পরিবেশন করা উচিত (foobar.com বিদ্যমান নেই)
সমাধান
এই ব্যবহার করে: mod_rewrite, mod_proxy_httpএবং অবশ্যই শুনব mod_vhost_alias।
ServerName my.domain
ServerAdmin admin@my.domain
<VirtualHost *:80>
ServerName localhost
VirtualDocumentRoot /var/www/localhost
</VirtualHost>
<VirtualHost *:80>
ServerName sub.domain
ServerAlias *.*.*
VirtualDocumentRoot /var/www/%-2.0.%-1.0/%-3
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3 !-d
RewriteRule (.*) http://localhost/$1 [P]
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3/%1 !-d
RewriteCond /var/www/%2.%3/www !-d
RewriteRule (.*) http://localhost/$1 [P]
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3/%1 !-d
RewriteRule (.*) http://%2.%3/$1 [P]
</VirtualHost>
<VirtualHost *:80>
ServerName bare.domain
ServerAlias *.*
VirtualDocumentRoot /var/www/%-2.0.%-1.0/www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)$ [NC]
RewriteCond /var/www/%1.%2 !-d [OR]
RewriteCond /var/www/%1.%2/www !-d
RewriteRule (.*) http://localhost/$1 [P]
</VirtualHost>
কিভাবে কাজ করে? তিনটি ভার্চুয়াল হোস্ট সংজ্ঞায়িত করা হয়েছে:
স্থানীয় হোস্ট
লোকালহোস্ট একটি ডিফল্ট হিসাবে পরিবেশন করে। সমাধানযোগ্য নয় এমন সমস্ত অনুরোধ লোকালহোস্ট দ্বারা পরিবেশন করা হয়। লোকালহোস্ট থেকে আপনার যে কোনও ডোমেইনে একটি সিমিলিংক সেটআপ করা সেই সাইটটিকে ডিফল্ট হিসাবে সেটআপ করার মতো।
sub.domain
সাব.ডোমেন ভোস্ট সমস্ত অনুরোধগুলি আকারে নিচ্ছে *.*.*। ডিফল্টরূপে সমস্ত অনুরোধগুলি /domain.com/subদ্বারা সংজ্ঞায়িত হিসাবে পরিবেশন করা হয় VirtualDocumentRoot /var/www/%-2.0.%-1.0/%-3।
পিছু হট:
প্রথমটি RewriteRuleঅজানা ডোমেনগুলির যত্ন নেয়, যেমন। domain.comলোকালহোস্ট ওয়েবসাইটটি প্রক্সিং করে ডিরেক্টরিটি বিদ্যমান নেই।
দ্বিতীয়টি ডিরেক্টরি এবং ডিরেক্টরি RewriteRuleউভয় উপস্থিত না থাকলে লোকালহোস্টের সাথেও প্রক্স হয় ।domain.com/subdomain.com/www
তৃতীয় RewriteRuleপ্রক্সি domain.comকখন domain.com/subবিদ্যমান নেই। আমরা জানি domain.com/wwwদ্বিতীয় পুনর্লিখনের ব্লকের কারণে অস্তিত্ব আছে।
bare.domain
খালি.ডোমেন ভোস্ট *.*অনুরোধগুলি গ্রহণ করছে এবং সেগুলি সরবরাহ করে/domain.com/www
এখানে RewriteRuleইচ্ছার প্রক্সি স্থানীয় হোস্টের যখন domain.comবা domain.com/wwwকোন অস্তিত্ব নেই।
^ $%। * !!!
এই সমস্ত চিহ্নগুলিতে $এবং %লক্ষণগুলির চারপাশে আমার মাথা জড়িয়ে কিছুটা সমস্যা ছিল RewriteCondএবং RewriteRuleতাই আমি তাদের সম্পর্কে এখানে ব্যাখ্যা করব:
ServerAlias *.*.*
VirtualDocumentRoot /var/www/%-2.0.%-1.0/%-3
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.(.*)$ [NC]
RewriteCond /var/www/%2.%3/%1 !-d
RewriteRule (.*) http://%2.%3/$1 [P]
- এর
*মধ্যে ServerAliasরয়েছে কেবল ওয়াইল্ডকার্ড।
%nমধ্যে VirtualDocumentRootথেকে এসেছ দস্তাবেজের নাম ক্ষেপক ।
%nদ্বিতীয় RewriteCondপছন্দসই মান নির্বাচন করে পড়ুন (.*)প্রথম থেকে RewriteCondযেমন। অনুরোধ করা ডোমেনের অংশগুলি।
%nমধ্যে RewriteRuleখুব না।
$1মধ্যে RewriteRuleনির্বাচন বোঝায় (.*)শুরুতে RewriteRule। যা ?অনুরোধ url এ ডোমেন থেকে সমস্ত কিছু ক্যাপচার করে । কোনও ক্যোরিস্ট্রিং ইউআরএল দ্বারা স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যায় mod_proxy।