.Htaccess (PHP) के साथ फ्लाई पर उप डोमेन बनाएं


122

मैं एक ऐसी प्रणाली बनाना चाहता हूं, जो साइनअप करने पर उपयोगकर्ता खाते के क्षेत्र के लिए मेरी वेबसाइट पर एक उपडोमेन बनाएगी।

जैसे johndoe.website.com

मुझे लगता है कि यह .htaccess फ़ाइल के साथ कुछ करना होगा और संभवतः वेबसाइट पर किसी अन्य स्थान पर रीडायरेक्ट करना होगा? मैं वास्तव में नहीं जानता। लेकिन मुझे शुरू करने के लिए किसी भी जानकारी की बहुत सराहना की जाएगी।

साइन अप क्षेत्र बनाना समस्या नहीं है - मैंने कई बार ऐसा किया है। मैं सिर्फ अनिश्चित हूं कि कहां से उपडोमेन शुरू करूं।

जवाबों:


125

तुरत रंडन होई

  1. आपको अपने DNS सर्वर * .website.com पर वाइल्डकार्ड डोमेन बनाने की आवश्यकता है
  2. तब आपके vhost कंटेनर में आपको वाइल्डकार्ड के साथ ही * .website.com निर्दिष्ट करना होगा - यह DOCs में किया जाता है।ServerAlias
  3. फिर PHP में उपडोमेन को निकालें और सत्यापित करें और उचित डेटा प्रदर्शित करें

लंबा संस्करण

1. वाइल्डकार्ड DNS प्रविष्टि बनाएँ

आपकी DNS सेटिंग्स में आपको वाइल्डकार्ड डोमेन प्रविष्टि बनाने की आवश्यकता होती है जैसे *.example.org। वाइल्डकार्ड प्रविष्टि इस तरह दिखाई देती है:

*.example.org.   3600  A  127.0.0.1

2. वाइल्डकार्ड को vhost में शामिल करें

अपाचे कॉन्फ़िगरेशन में अगला आपको एक Vhost कंटेनर स्थापित करने की आवश्यकता है जो ServerAlias DOCs निर्देश में वाइल्डकार्ड निर्दिष्ट करता है । एक उदाहरण vhost कंटेनर:

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

3. बाहर काम करें जो आप उपडोमेन PHP में हैं

फिर अपनी PHP स्क्रिप्ट में आप $_SERVERसुपर ग्लोबल वैरिएबल में देखकर डोमेन का पता लगा सकते हैं । यहाँ PHP में उपडोमेन को हथियाने का एक उदाहरण दिया गया है:

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

मैंने अपनी साइट www.subdomain.example.org या subdomain.plample.org के माध्यम से लोगों को हिट करने की अनुमति देने के लिए यहां रेगेक्स का उपयोग किया है।

यदि आप कभी भी www से निपटने का अनुमान नहीं लगाते हैं। (या अन्य उप-डोमेन) तो आप बस एक विकल्प का उपयोग कर सकते हैं:

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

मास वर्चुअल होस्टिंग

मास वर्चुअल होस्टिंग उपरोक्त में थोड़ी भिन्न योजना है जिसमें आप आमतौर पर इसका उपयोग करने के बजाय कई अलग-अलग वेबसाइटों की मेजबानी करने के लिए इसका उपयोग करने का प्रयास कर सकते हैं क्योंकि यह एक एप्लिकेशन को शक्ति देने का प्रयास करता है।

मैंने अपने ब्लॉग पर एक पोस्ट से पहले अपने mod_rewrite आधारित मास वर्चुअल होस्टिंग वातावरण का दस्तावेजीकरण किया है , जिसे आप देख सकते हैं कि क्या वह मार्ग है जिसे आप लेना चाहते हैं। बेशक, संबंधित अपाचे मैनुअल पेज भी है

अपाचे में मास वर्चुअल होस्टिंग से निपटने का एक आंतरिक तरीका भी है जो मैंने उपयोग किए गए mod_rewrite विधि की तुलना में थोड़ा कम लचीला है। यह सभी अपाचे डायनामिकली कॉन्फ़िगर मास वर्चुअल होस्टिंग मैनुअल पेज पर वर्णित है ।


बशर्ते आप इसका उपयोग कर सकें wildcard subdomains, ऐसा करने के लिए मेरा समाधान देखें .htaccess
डैन ब्रे

मुझे विश्वास नहीं है कि एक वर्चुअल होस्ट को जोड़ा जा सकता है। यह सुरक्षा के बारे में मुझे बहुत परेशान करता है। 2.4 से, होस्टनाम पर निर्भर आधार निर्देशिका का चयन करना संभव है (लेकिन डैन की विधि में कुछ मुद्दे भी हैं) पर विचार करें:RewriteRule "^/?(.*)" "http://%{HTTP_HOST}/%{HTTP_HOST}/$1" [L,R,NE]
सिम्बियन

ध्यान दें कि इस कोड को लागू करने वाला PHP कोड वेबसर्वर यूआईडी के रूप में नहीं चलना चाहिए (यह
सुडो के

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
इसके अलावा, यह आवश्यक है कि आपका DNS सर्वर प्रत्येक उपडोमेन नाम का समाधान करे।
अराजकता

1
मैंने इसे अन्य वेबसाइटों पर देखा है, निश्चित रूप से उन्हें हर उप डोमेन को हल करने की जरूरत नहीं है?
बेन मैकराय

1
खैर, यह इस बात पर निर्भर करता है कि आप इससे क्या मतलब रखते हैं। यदि आपका मतलब है, हर बार इंटरनेट पर कोई व्यक्ति foo.somedomain.com देखता है और यह कैश नहीं होता है, तो उनके DNS सर्वर को इसे हल करना होगा, फिर हाँ।
अराजकता

यदि आपका मतलब है, तो क्या उन्हें विशेष रूप से प्रत्येक डोमेन के लिए DNS रिकॉर्ड स्थापित करना है, ट्रेफिनॉन का जवाब देखें।
अराजकता

ठीक है इसके लिए धन्यवाद। मुझे काफी समझ में नहीं आया कि वाइफकार्ड को वाइहोस्टर में निर्दिष्ट करने से ट्रेफिनॉन का क्या मतलब है?
बेन मैकएरे


6

मैंने इसे PHP के साथ करना आसान पाया। वास्तव में cPanel के भीतर एक उपडोमेन बना रहा है और वांछित डोमेन नाम के तहत अपना फ़ोल्डर बनाएं। जैसा कि आप इसे मैन्युअल रूप से cPanel में करेंगे, लेकिन यह सब एक साधारण PHP फ़ंक्शन द्वारा मिलीसेकंड में किया जाता है। कोई आवश्यक क्लिक करें :)

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";

}

जांचें कि क्या यह सफलतापूर्वक cPanel पर बनाया गया था और, FTP (या फ़ाइल प्रबंधक) द्वारा जांचें कि public_html / उपडोमेन फ़ोल्डर के अंदर क्या है। यदि आपके पास कोई उपडोमेन बनाते समय सामान जोड़ने वाली cPanel सेटिंग है तो यह मक्खी पर उपडोमेन बनाने से संबंधित नहीं है।
एड्रियन पी।

CPanel
Ruchi

तब आपके पास cPanel पर पर्याप्त अनुमति नहीं है। क्या यह साझा होस्टिंग VPS या समर्पित सर्वर है?
एड्रियन पी।

यह उपडोमेन नहीं बनाने के कई कारण हो सकते हैं। उपरोक्त स्क्रिप्ट से संबंधित नहीं है लेकिन आपके DNS कॉन्फ़िगरेशन के साथ। पढ़ें कि और cPanel मंचों पर मदद के लिए पूछना। फ़ोरम
.

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 फ़ोल्डर के हर सबफ़ोल्डर को उपडोमेन (foldername.domain.com) के माध्यम से स्वीकार्य है।

यह सालों पहले http://www.webmasterworld.com/apache/3163397.htm पर मिला था


4

इसका .htaccess से कोई लेना-देना नहीं है। आपको उप डोमेन के लिए DNS रिकॉर्ड और वर्चुअल होस्टिंग सेट अप करने की आवश्यकता होगी।


4

Mod_vhost_alias ऐसा करने के लिए सही मॉड्यूल है।

एक पंक्ति के साथ आप अपाचे को सही जगह देखने के लिए कह सकते हैं, निर्देशिका हैशिंग आदि के साथ, उदाहरण के लिए, रेखा:

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

सबडोमेन.यूरोमैन के लिए अनुरोध करने पर अपाचे को दस्तावेज़ जड़ / http / उपयोगकर्ताओं / s / u / उपडोमेन पर सेट करने के लिए कहेंगे


0

मुझे लगता है कि अपाचे के डायनामिक मास वर्चुअल होस्टिंग के साथ वाइल्ड कार्ड डीएनएस एक उचित समाधान भी है। हालांकि, मैंने कभी इसकी कोशिश नहीं की।

यदि आपको कई सर्वरों या अन्य समाधानों को स्केल करने की आवश्यकता है, तो आपके लिए काम नहीं करता है, मैं एक डेटाबेस संचालित DNS सर्वर का उपयोग करने की सलाह देता हूं। मैंने अतीत में MyDNS का सफलतापूर्वक उपयोग किया है । चूँकि यह MySQL (या PostgreSQL) का उपयोग करता है, आप अपने DNS को PHP के साथ या कुछ और के बारे में बता सकते हैं। कोड ऐसा नहीं लगता है कि यह कुछ समय में अपडेट किया गया है, लेकिन यह DNS है और इसलिए बिल्कुल अत्याधुनिक नहीं है।


0

वाइल्डकार्ड सबडोमेन निर्माण के तरीके

FIrst आपको अपने सर्वर DNS एडिटर का उपयोग करके DNS सेटिंग्स बनानी होंगी।

  1. सर्वर आईपी पते में Aहोस्ट *वाइल्ड कार्ड के साथ DNS सेटिंग्स में रिकॉर्ड बनाएं ।

    * 1400 IN A ip_address

  2. Aहोस्ट @या के साथ DNS सेटिंग्स में एक बार फिर से रिकॉर्ड बनाएंdomain_name.tld सर्वर आईपी पते के । tld का अर्थ है शीर्ष स्तर के डोमेन या डोमेन का विस्तार जैसे .com, .org, आदि…।

    @ 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

यदि आप htaccess का उपयोग करके डेटा को पैरामीटर के रूप में पास करने के लिए इच्छुक नहीं हैं, तो आप निम्न कोडिंग का उपयोग करके भी डेटा प्राप्त कर सकते हैं:

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। क्योंकि आपके उपडोमेन से पहले संयुक्त कुछ अतिरिक्त नाम भी लागू होते हैं www.example.domainname.tld। यह वापसी $_GET['data']='wwww'इसलिए मेरा सुझाव है कि इसका उपयोग करने $_SERVER['http_host']के बजाय सटीक मान प्राप्त करने के लिए उपयोग करें।$_SERVER['query_string'] या htaccess मापदंडों । आपका अनुक्रमणिका पृष्ठ)

6. इस वाइल्डकार्ड सबडोमेन के निष्पादन के समय टीटीएल - डीएनएस सैटिंग्स में एन सेकंड का उपयोग करें।

अपने दिए गए ttl समय (६०० - १० मिनट) जैसे => के बाद उपडोमेन चेक करें http://abc.domain.tld

(ध्यान दें: वाइल्डकार्ड सबडोमेन विद्यमान उप-डोमेन को ओवरराइड नहीं करते हैं। क्योंकि आपकी मौजूद उप-डोमेन के लिए पहली प्राथमिकता हमेशा)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.