.Htaccess (পিএইচপি) দিয়ে ফ্লাইতে সাবডোমেনগুলি তৈরি করুন


122

আমি এমন একটি সিস্টেম তৈরির সন্ধান করছি যা সাইনআপের মাধ্যমে ব্যবহারকারীদের অ্যাকাউন্টের জন্য আমার ওয়েবসাইটে একটি সাবডোমেন তৈরি করবে।

যেমন jhndoe.website.com

আমি মনে করি এটি .htaccess ফাইলের সাথে কিছু করা এবং সম্ভবত ওয়েবসাইটের অন্য কোনও জায়গায় পুনঃনির্দেশ করা উচিত? আমি আসলে জানি না। তবে আমাকে শুরু করার জন্য যে কোনও তথ্য প্রশংসিত হবে।

সাইন আপ অঞ্চল তৈরি করা সমস্যা নয় - আমি অনেকবার এটি করেছি। সাবডোমেন দিয়ে কোথায় শুরু করব তা আমি নিশ্চিত নই।

উত্তর:


125

দ্রুত রুনডাউন

  1. আপনার ডিএনএস সার্ভার * .website.com এ আপনাকে একটি ওয়াইল্ডকার্ড ডোমেন তৈরি করতে হবে
  2. তারপরে আপনার ভোস্ট পাত্রে আপনাকে ওয়াইল্ডকার্ডও নির্দিষ্ট করতে হবে * .website.com - এটি ServerAlias ডওসিগুলিতে করা হয়
  3. তারপরে পিএইচপি-তে সাবডোমেনটি বের করুন এবং যাচাই করুন এবং উপযুক্ত ডেটা প্রদর্শন করুন

দীর্ঘ সংস্করণ

1. একটি ওয়াইল্ডকার্ড ডিএনএস এন্ট্রি তৈরি করুন

আপনার DNS সেটিংস আপনি একটি তৈরি করতে হবে ওয়াইল্ডকার্ড ডোমেইন এন্ট্রি যেমন *.example.org। একটি ওয়াইল্ডকার্ড এন্ট্রি দেখে মনে হচ্ছে:

*.example.org.   3600  A  127.0.0.1

2. ভোস্টে ওয়াইল্ডকার্ড অন্তর্ভুক্ত করুন

অ্যাপাচি কনফিগারেশনের পরবর্তী অংশে আপনাকে একটি ভোস্ট কনটেইনার সেটআপ করতে হবে যা ServerAlias ডিওসির নির্দেশিকায় ওয়াইল্ডকার্ড নির্দিষ্ট করে । ভোস্ট ধারক একটি উদাহরণ:

<VirtualHost *:80>
  ServerName server.example.org
  ServerAlias *.example.org
  UseCanonicalName Off
</VirtualHost>

৩. আপনি পিএইচপি-তে কোন সাবডোমেন আছেন তা নিয়ে কাজ করুন

তারপরে আপনার পিএইচপি স্ক্রিপ্টগুলিতে আপনি $_SERVERসুপার গ্লোবাল ভেরিয়েবলটি সন্ধান করে ডোমেনটি সন্ধান করতে পারেন । এখানে পিএইচপি-তে সাবডোমেন দখল করার একটি উদাহরণ রয়েছে:

preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
    $subdomain = $matches[1];
}

Www.subdomain.example.org বা subdomain.example.org- এর মাধ্যমে আপনার সাইটে লোকেরা আঘাত করার অনুমতি দেওয়ার জন্য আমি এখানে রেইগেক্স ব্যবহার করেছি।

যদি আপনি কখনই www এর সাথে ডিল করার অনুমান করেন না। (বা অন্যান্য সাবডোমেন) তারপরে আপনি কেবল এ জাতীয় স্ট্রিং ব্যবহার করতে পারেন:

$subdomain = substr(
                 $_SERVER['SERVER_NAME'], 0,
                 strpos($_SERVER['SERVER_NAME'], '.')
             );

গণ ভার্চুয়াল হোস্টিং

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

আমি আমার ব্লগের একটি পোস্টে আমার মোড_আরাইট ভিত্তিক ভর ভার্চুয়াল হোস্টিং পরিবেশের নথিভুক্ত করেছি , যা আপনি নিতে চাইলে সেই পথটি কিনা তা আপনি দেখতে পারেন। অবশ্যই, সম্পর্কিত অ্যাপাচি ম্যানুয়াল পৃষ্ঠা রয়েছে

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


আপনি যদি ব্যবহার করতে পারেন তবে এটি করতে wildcard subdomainsআমার সমাধান দেখুন .htaccess
ড্যান ব্রে

আমি বিশ্বাস করি না। ভার্চুয়াল হোস্টটি .htaccess থেকে যোগ করা যেতে পারে এটি সুরক্ষা সম্পর্কেও আমাকে উদ্বিগ্ন করে তোলে। ২.৪ থেকে, হোস্টনামের উপর নির্ভরশীল একটি বেস ডিরেক্টরি নির্বাচন করা সম্ভব হবে (তবে ড্যানের পদ্ধতিতে কিছু সমস্যা রয়েছে) বিবেচনা করুন:RewriteRule "^/?(.*)" "http://%{HTTP_HOST}/%{HTTP_HOST}/$1" [L,R,NE]
সিমকিয়ান

দ্রষ্টব্য যে এই পিএইচপি কোডটি বাস্তবায়ন করা আবশ্যক ওয়েব সার্ভার
ইউআইডি

12

আপনি প্রতিটি সাবডোমেনটিকে প্রথমে অনুমতি দিতে পারেন এবং তারপরে সাবডোমেনটি বৈধ কিনা তা পরীক্ষা করে দেখতে পারেন। উদাহরণ স্বরূপ:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule !^index\.php$ index.php [L]

index.phpসাবডোমেনটি ব্যবহার করে আপনি যা ব্যবহার করতে পারবেন তার ভিতরে এটি ব্যবহার করুন:

if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
    var_dump($match[1]);
}

তবে এই সমস্তটির জন্য আপনার ওয়েবসভারটি প্রতিটি সাবডোমেন নাম গ্রহণ করে।


3
তদতিরিক্ত, এটির জন্য আপনার ডিএনএস সার্ভারটি প্রতিটি সাবডোমেন নামটি সমাধান করে।
বিশৃঙ্খলা

1
আমি অন্যান্য ওয়েবসাইটে এটি করা দেখেছি, নিশ্চয়ই তারা প্রতিবারের মতো প্রত্যেক সাবডোমেনটি সমাধান করতে পারে না?
বেন ম্যাক্রে

1
ঠিক আছে, এটি এর দ্বারা আপনি কী বোঝাতে চাইছেন তা নির্ভর করে। যদি আপনার অর্থ হয়, প্রতিবার ইন্টারনেটে কেউ foo.somedomain.com খোঁজেন এবং এটি ক্যাশে হয় না, তবে তাদের ডিএনএস সার্ভারটি এটি সমাধান করতে হবে, তবে হ্যাঁ।
বিশৃঙ্খলা

যদি আপনার অর্থ হয়, তাদের কি প্রতিটি ডোমেনের জন্য বিশেষত ডিএনএস রেকর্ডস সেট আপ করতে হবে, ট্র্যাফিননের উত্তর দেখুন।
বিশৃঙ্খলা

ঠিক আছে তার জন্য ধন্যবাদ। আমি ভোস্টে ওয়াইল্ডকার্ড নির্দিষ্ট করে ট্রাফিনননের অর্থ কী তা আমি পুরোপুরি বুঝতে পারি না?
বেন ম্যাক্রে


6

আমি পিএইচপি দিয়ে এটি করা আরও সহজ পেয়েছি। আসলে সিপ্যানেলের মধ্যে একটি সাবডোমেন তৈরি করা এবং পছন্দসই ডোমেন নামের অধীনে আপনার ফোল্ডার তৈরি করা হয়। আপনি সিপ্যানেলে ম্যানুয়ালি এটি করবেন তবে এটি একটি সাধারণ পিএইচপি ফাংশন দ্বারা মিলিসেকেন্ডগুলিতে সম্পন্ন হয়েছে। কোনও ক্লিকের প্রয়োজন নেই :)

function create_subdomain($subDomain,$cPanelUser,$cPanelPass,$rootDomain) {

    //  $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain;

    $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain . "&dir=public_html/subdomains/" . $subDomain;

    $openSocket = fsockopen('localhost',2082);
    if(!$openSocket) {
        return "Socket error";
        exit();
    }

    $authString = $cPanelUser . ":" . $cPanelPass;
    $authPass = base64_encode($authString);
    $buildHeaders  = "GET " . $buildRequest ."\r\n";
    $buildHeaders .= "HTTP/1.0\r\n";
    $buildHeaders .= "Host:localhost\r\n";
    $buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
    $buildHeaders .= "\r\n";

    fputs($openSocket, $buildHeaders);
        while(!feof($openSocket)) {
           fgets($openSocket,128);
        }
    fclose($openSocket);

    $newDomain = "http://" . $subDomain . "." . $rootDomain . "/";

   //  return "Created subdomain $newDomain";

}

এটি সিপ্যানেলে সফলভাবে তৈরি হয়েছে কিনা তা পরীক্ষা করুন এবং, জন_এইচটিএমএল / সাবডোমেন ফোল্ডারটির ভিতরে কী আছে তা এফটিপি (বা ফাইল ম্যানেজার) দ্বারা পরীক্ষা করুন। আপনি সাবডোমেন তৈরি করার সময় আপনার যদি সিপ্যানেল সেটিংস যুক্ত জিনিস থাকে তবে এটি ফ্লাইতে সাবডোমেন তৈরির সাথে সম্পর্কিত নয়।
অ্যাড্রিয়ান পি।

সিপ্যানেলে কোনও তৈরি করা হয়নি
রুচি

তারপরে আপনার সিপ্যানেলে পর্যাপ্ত অনুমতি নেই। এটি কি শেয়ারিং হোস্টিং ভিপিএস বা ডেডিকেটেড সার্ভার?
অ্যাড্রিয়ান পি

সাবডোমেন তৈরি না করার একাধিক কারণ হতে পারে। উপরের স্ক্রিপ্টের সাথে নয় তবে আপনার ডিএনএস কনফিগারেশনের সাথে সম্পর্কিত। এটি পড়ুন এবং সিপানেল ফোরামে সহায়তা চাইতে ask forums.cpanel.net/threads/subdomains-not- working.228132
অ্যাড্রিয়ান পি।

5

সবচেয়ে সহজ উপায় হ'ল সমস্ত সাবডোমেনগুলি (ওয়াইল্ডকার্ড * সহ) আপনার / wwwroot এর দিকে নির্দেশ করতে। তারপরে নিম্নলিখিত কোড সহ এই ফোল্ডারে .htaccess লাগান:

RewriteCond %{ENV:REDIRECT_SUBDOMAIN} ="" 
RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.domain\.com\.?(:80)?$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/%1 -d 
RewriteRule ^(.*) %1/$1 [E=SUBDOMAIN:%1,L] 
RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]

এটি সাবডোমেন (ফোল্ডারনেম.ডোমেন.কম) এর মাধ্যমে গ্রহণযোগ্য / wwwroot ফোল্ডারের প্রতিটি সাবফোল্ডারটি সম্পন্ন করবে।

এই বছর আগে http://www.webmasterworld.com/apache/3163397.htm এ পাওয়া গেছে


4

.Htaccess এর সাথে কিছুই করার নেই। সাবডোমেনগুলির জন্য আপনাকে ডিএনএস রেকর্ড এবং ভার্চুয়াল হোস্টিং সেট আপ করতে হবে।


4

মোড_ভোস্ট_লিয়াস এটি করার সঠিক মডিউল।

একটি লাইনের সাহায্যে আপনি আপাচেকে সঠিক স্থান, ডিরেক্টরি হ্যাশিং ইত্যাদির সাথে দেখতে বলতে পারেন উদাহরণস্বরূপ, লাইন:

VirtualDocumentRoot /http/users/%3.1/%3.2/%3

সাবডোমেন.ইউরডোমেন.কমের জন্য অনুরোধ করা হলে আপাচে ডকুমেন্টের মূলটি / HTTP / ব্যবহারকারী / গুলি / সাব / ডোমেইনে সেট করতে বলত


0

আমি মনে করি অ্যাপাচের ডায়নামিক মাস ভার্চুয়াল হোস্টিং সহ ওয়াইল্ড কার্ড ডিএনএস একটি যুক্তিসঙ্গত সমাধান। যদিও, আমি কখনও চেষ্টা করে দেখিনি।

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


0

ওয়াইল্ডকার্ড সাবডোমেন তৈরির পদ্ধতি

প্রথমত আপনার সার্ভার ডিএনএস সম্পাদক ব্যবহার করে আপনাকে ডিএনএস সেটিংস তৈরি করতে হবে।

  1. সার্ভার আইপি ঠিকানায় Aহোস্ট *ওয়াইল্ড কার্ডের সাথে ডিএনএস সেটিংসে রেকর্ড তৈরি করুন ।

    * 1400 IN A ip_address

  2. Aহোস্টের সাথে @বা domain_name.tldসার্ভার আইপি ঠিকানায় আবার ডিএনএস সেটিংসে একটি রেকর্ড তৈরি করুন । tld এর অর্থ শীর্ষ স্তরের ডোমেন বা ডোমেনগুলির সম্প্রসারণ যেমন .কম, .org, ইত্যাদি .... means

    @ 1400 IN A ip_address অথবা domain_name.tld 1400 IN A ip_address

  3. CNAMEরেকর্ড তৈরি করুন :

    www 1400 IN A domainname.tld

  4. *ওয়াইল্ডকার্ডের মতো সাবডোমেন তৈরি করুন*.domain.tld
  5. আপনার সাবডোমেন ডিরেক্টরিতে htaccess তৈরি করুন *.domain.tldএবং এই কোডটি দিন:

    Options +FollowSymLinks 
    RewriteEngine On 
    RewriteBase /
    RewriteRule ^([aA-zZ0-9]+)$ index.php?data=$1
    RewriteCond %{HTTP_HOST} ^([aA-zZ0-9]+)\.([aA-zZ0-9-]+)\.([aA-zZ]+)
    RewriteRule ([aA-zZ0-9]+) index.php?data=%1

    আপনার প্রথম ওয়াইল্ডকার্ড সাবডোমেন পরীক্ষা করুন example.domainname.tld

আপনি যদি এইচটিসেস ব্যবহার করে প্যারামিটার হিসাবে ডেটা পাস করতে আগ্রহী না হন তবে আপনি নিম্নলিখিত কোডিং ব্যবহার করে ডেটা পেতে পারেন:

define("SUBDOMAIN_PARENT","domainname.tld");   
class getData
    {
         function __construct()
        {
            $this->data="";
            $http_host=$_SERVER['HTTP_HOST'];
         $subdom_data= str_replace(SUBDOMAIN_PARENT,"",$http_host);
         $expl_subdom_data=explode(".",$subdom_data);
      $expl_subdom_data=array_filter($expl_subdom_data);

            if($expl_subdom_data!=NULL)
            {
           $this->data=end($expl_subdom_data);
            }
       }
    }
$GLOBALS['get_data']=new getData();

এবং আপনার গ্লোবাল ভেরিয়েবলটি যে কোনও জায়গায় ব্যবহার করুন global $get_data

echo $get_data->data; //example

(দ্রষ্টব্য: এই শ্রেণিটি মূলত সঠিক সাবডোমেন http_hostনামটি পাওয়ার জন্য ব্যবহৃত হয় because কেননা আপনার সাবডোমেনের আগে কিছু অতিরিক্ত নাম যুক্ত করার মতো প্রয়োগও হয় www.example.domainname.tldThis এই রিটার্নটি $_GET['data']='wwww'তাই আমার পরামর্শটি ব্যবহার করতে হবে$_SERVER['http_host'] ব্যবহার সঠিক মান পেতে পরিবর্তে জন্য$_SERVER['query_string'] প্রবেশের পরামিতি বা উত্তীর্ণের আপনার সূচী পাতা)

This. এই ওয়াইল্ডকার্ড সাবডোমেনগুলি কার্যকর করতে টিটিএল - ডিএনএস সেটিংগুলিতে এন সেকেন্ড ব্যবহার করে।

7. আপনার প্রদত্ত টিটিএল সময় (600 - 10 মিনিট) এর মতো => এর পরে সাবডোমেনটি দেখুন http://abc.domain.tld

(দ্রষ্টব্য: ওয়াইল্ডকার্ড সাবডোমেনগুলি বিদ্যমান সাবডোমাইনগুলিকে ওভাররাইড করে না Because কারণ সর্বদা আপনার অস্তিত্বশীল সাবডোমেনগুলির জন্য প্রথম অগ্রাধিকার)

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