PHP को प्रत्येक उपयोगकर्ता के लिए स्वचालित रूप से उपडोमेन बनाने की अनुमति कैसे दें?


162

मैं http://user.mywebsite.com जैसे उपडोमेन कैसे बनाऊं ? क्या मुझे किसी तरह htaccess का उपयोग करना है? क्या वास्तव में इसे केवल शुद्ध php कोड के माध्यम से बनाना संभव है या मुझे कुछ बाहरी स्क्रिप्ट-सर्वर साइड भाषा का उपयोग करने की आवश्यकता है?

उन लोगों के लिए जिन्होंने जवाब दिया: ठीक है, फिर, क्या मुझे अपनी होस्टिंग से पूछना चाहिए कि क्या वे किसी प्रकार का डीएनएस उपयोग प्रदान करते हैं ??


शायद इसकी डीएनएस एक्सेस के लिए अपने प्रदाता से पूछने की आवश्यकता नहीं है, क्योंकि उपडोमेन रूटिंग (मार्क का उत्तर) पहले से ही सक्रिय है! यदि उप-डोमेन आपको परिणाम देता है तो बस अपने ब्राउज़र में प्रयास करें। और फिर उन्हें .htaccess फ़ाइल के साथ रूट करें।
powtac

यदि आप इसका उपयोग कर सकते हैं तो wildcard subdomainsइसे प्राप्त किया जा सकता है .htaccess। मेरा समाधान देखें।
डैन ब्रे

जवाबों:


135

आप एक कस्टम A रिकॉर्ड बनाना चाहते हैं ।

मुझे पूरा यकीन है कि आप वाइल्डकार्ड्स का उपयोग कर सकते हैं जब ए रिकॉर्ड्स निर्दिष्ट करते हैं जो आपको ऐसा कुछ करने देगा:

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1 आपके वेबसर्वर का IP पता होगा। वास्तव में रिकॉर्ड जोड़ने की विधि आपके मेजबान पर निर्भर करेगी।


Http://mywebsite.com/user की तरह इसे करना बहुत आसान होगा अगर यह एक विकल्प है।

तब आप बस एक .htaccess फ़ाइल जोड़ सकते हैं जो इस तरह दिखती है:

Options +FollowSymLinks

RewriteEngine On
RewriteRule ^([aA-zZ])$  dostuff.php?username=$1

उपर्युक्त में, उपयोगकर्ता नाम वर्ण az तक सीमित हैं


उपडोमेन को हथियाने के लिए पुनर्लेखन नियम इस तरह दिखेगा:

RewriteCond %{HTTP_HOST} ^(^.*)\.mywebsite.com
RewriteRule (.*)  dostuff.php?username=%1

1
जब तक प्रत्येक उपडोमेन को अलग सर्वर से सेवा नहीं दी जाती है, मैं बात करूंगा कि Canonical Name (CNAME) रिकॉर्ड बनाना बेहतर योजना होगी। en.wikipedia.org/wiki/List_of_DNS_record_types
theraccoonbear

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

@theraccoonbear मानकर आप CNAME के ​​साथ वाइल्डकार्ड का उपयोग कर सकते हैं, यह एक विचार है।
मार्क बेन्क

3
मुझे और अधिक विशिष्ट होना चाहिए। .htaccess अपाचे के लिए है, IIS नहीं। मुझे यकीन नहीं है कि url पुनर्लेखन को IIS के साथ कैसे संभाला जाता है, लेकिन मेरा मानना ​​है कि SO पर वहाँ के बारे में कुछ प्रश्न हैं।
मार्क बेक्क

1
हाय मार्क, मैंने आपके द्वारा ऊपर दिए गए चरणों का पालन किया, लेकिन जब मैं xyz.mydomain.com करता हूं, तो यह xyz.mydomain.com/cgi-sys/defaultwebpage.cgi पर रीडायरेक्ट करता है ... क्या मुझे और कुछ करने की आवश्यकता है, तो उपरोक्त चरणों का उल्लेख करें ?
आशीष राजन

30

आपके बाद की सुविधा को वाइल्डकार्ड सबडोमेन कहा जाता है । यह आपको प्रत्येक उपडोमेन के लिए DNS सेटअप करने की अनुमति नहीं देता है, और इसके बजाय पुनर्निर्देशन के लिए अपाचे पुनर्लेखनों का उपयोग करता है। आप यहाँ एक अच्छा ट्यूटोरियल पा सकते हैं , लेकिन वहाँ हजारों ट्यूटोरियल हैं। यहाँ उस ट्यूटोरियल से आवश्यक कोड है:

<VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.domain.tld
    ServerAlias *.domain.tld
</VirtualHost>

हालाँकि, यह VirtualHosts के उपयोग की आवश्यकता के रूप में यह एक स्थानीय .htaccess के बजाय सर्वर के httpd.conf फ़ाइल में सेट किया जाना चाहिए।


जब से मैं साझा होस्टिंग पर हूँ तब से मैं httpd.conf फ़ाइल तक नहीं पहुँच सकता। मैं क्या कर सकता हूँ?
वेबर डिपोर

23

मैं इसे मार्क से थोड़ा अलग करता हूं। मैं संपूर्ण डोमेन पास करता हूं और उप डोमेन को php में पकड़ता हूं।

RewriteCond {REQUEST_URI} !\.(png|gif|jpg)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?uri=$1&hostName=%{HTTP_HOST}

यह छवियों और सभी चीजों को मेरी index.php फ़ाइल में अनदेखा करता है। इसलिए अगर मैं जाऊं

http://fred.mywebsite.com/album/Dance/now

मैं वापस आऊंगा

http://fred.mywebsite.com/index.php?uri=album/Dance/now&hostName=fred.mywebsite.com

फिर अपने index.php कोड में मैं सिर्फ होस्टनाम से अपना उपयोगकर्ता नाम विस्फोट कर सकता हूं। यह मुझे बहुत सुंदर एसईओ यूआरएल देता है।


14

हमने वाइल्डकार्ड DNS को सेटअप किया जैसे उन्होंने ऊपर बताया। तो एक रिकॉर्ड है * .yourname.com

फिर सभी उप डोमेन वास्तव में एक ही स्थान पर जा रहे हैं, लेकिन PHP प्रत्येक उप डोमेन को एक अलग खाते के रूप में मानता है।

हम निम्नलिखित कोड का उपयोग करते हैं:

$url=$_SERVER["REQUEST_URI"];
$account=str_replace(".yourdomain.com","",$url);

यह कोड $accountवैरिएबल को उपडोमेन की तरह ही सेट करता है । फिर आप उनकी फ़ाइलों और उनके खाते के आधार पर अन्य जानकारी प्राप्त कर सकते हैं।

यह संभवतः उन तरीकों के रूप में कुशल नहीं है जो वे ऊपर सूचीबद्ध करते हैं, लेकिन यदि आपके पास BIND और / या सीमित नहीं है। तो इस तरीके से काम करना चाहिए (जब तक आपका होस्ट आपके लिए वाइल्डकार्ड सेटअप करेगा)।

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


2
मुझे लगता है कि यह सही जवाब है, क्योंकि PHP कैसे वेब या DNS सर्वर को हैंडल नहीं करता है उपडोमेन संभालती है, इस बारे में पूछे जाने वाले प्रश्न का सही उत्तर है ।
सेलम

8

जब आप अपाचे मास वर्चुअल होस्टिंग का उपयोग कर सकते हैं, तो .htaccess फ़ाइलों के साथ उपद्रव न करें ।

प्रलेखन से:

#include part of the server name in the filenames VirtualDocumentRoot /www/hosts/%2/docs

एक तरह से यह आपके सवाल का उल्टा है: प्रत्येक 'उपडोमेन' एक उपयोगकर्ता है। यदि उपयोगकर्ता मौजूद नहीं है, तो आपको 404 मिलते हैं।

एकमात्र दोष यह है कि पर्यावरण चर DOCUMENT_ROOTसही तरीके से उपयोग किए गए उपनिर्देशिका पर सेट नहीं है , लेकिन डी htconfig में डिफ़ॉल्ट document_root है।


1
मुझे वास्तव में यकीन नहीं है कि इसका उपयोग कैसे करें .. और अंत में, htaccess के साथ गड़बड़ क्यों नहीं करना चाहिए?
स्कूटा

6

उप डोमेन और बहु-डोमेन वेब एप्लिकेशन के लिए सरल PHP समाधान

चरण 1. डोमेन (या डोमेन) के लिए DNS ए रिकॉर्ड को "उदाहरण के लिए प्रदान करें"

A record => *.example.org
A record => *.example.net

चरण 2. जब उपयोगकर्ता पंजीकरण कर रहा हो या लॉगिन बदल रहा हो तो लॉगिन की अद्वितीयता की जाँच करें। इसके अलावा, उन लॉगिन में डॉट्स से बचें।

चरण 3. फिर क्वेरी की जांच करें

        // Request was http://qwerty.example.org
        $q = explode('.', $_SERVER['HTTP_HOST']);
        /*
            We get following array
            Array
            (
                [0] => qwerty
                [1] => example
                [2] => org
            )
        */

        // Step 4.
        // If second piece of array exists, request was for 
        // SUBDOMAIN which is stored in zero-piece $q[0]
        // otherwise it was for DOMAIN

        if(isset($q[2])) {
            // Find stuff in database for login $q[0] or here it is "qwerty"
            // Use $q[1] to check which domain is asked if u serve multiple domains
        }

?>

यह समाधान विभिन्न डोमेन परोस सकता है

qwerty.example.org
qwerty.example.net 

johnsmith.somecompany.com
paulsmith.somecompany.com

यदि आपको अलग-अलग सेवा वाले अलग-अलग डोमेन पर समान nicks की आवश्यकता है, तो आपको लॉगिन पंजीकरण करते समय उपयोगकर्ता के लिए डोमेन चुनने की आवश्यकता हो सकती है।

smith.example.org // Show info about John Smith
smith.example.net // Show info about Paul Smith 

4

आप [संभावित] URL का पुनर्लेखन कर सकते हैं, लेकिन हाँ: आपको अपनी DNS सेटिंग्स पर नियंत्रण रखना होगा ताकि जब कोई उपयोगकर्ता जोड़ा जाए तो उसे अपना उपडोमेन मिल जाए।


4

नए उपडोमेन को संभालने के लिए अपने WWW सर्वर पर कॉन्फ़िगरेशन परिवर्तन के अलावा, आपके कोड को आपके DNS रिकॉर्ड्स में परिवर्तन करने की आवश्यकता होगी। इसलिए, जब तक आप अपना खुद का BIND (या समान) नहीं चला रहे हों, आपको यह पता लगाना होगा कि अपने नाम सर्वर प्रदाता के कॉन्फ़िगरेशन का उपयोग कैसे करें। यदि वे कुछ प्रकार के एपीआई की पेशकश नहीं करते हैं, तो यह मुश्किल हो सकता है।

अपडेट: हां, मैं आपके रजिस्ट्रार से जांच करूंगा कि क्या वे नाम सर्वर सेवा प्रदान कर रहे हैं (जैसा कि अक्सर होता है)। मैंने पहले कभी इस विकल्प की खोज नहीं की है लेकिन मुझे संदेह है कि अधिकांश उपभोक्ता रजिस्ट्रार नहीं करते हैं। मैं GoDaddy API और GoDaddy DNS API के लिए Googled था, लेकिन कुछ भी चालू करने में सक्षम नहीं था, इसलिए मुझे लगता है कि आपके प्रदाता के साथ ऑनलाइन मदद की जाँच करना सबसे अच्छा विकल्प होगा, और यदि वह प्रश्न का उत्तर नहीं देता है, तो एक पकड़ प्राप्त करें उनके सहायक कर्मचारियों की।


3

सबसे पहले, आपको यह सुनिश्चित करने की आवश्यकता है कि वाइल्डकार्ड सबडोमेन की अनुमति देने के लिए आपका सर्वर कॉन्फ़िगर किया गया है। मैंने जस्टहॉस्ट में मैन्युअल रूप से नाम से एक सबोमैन बनाकर हासिल किया *। मैंने subdomainsवाइल्डकार्ड सबडोमेन के लिए दस्तावेज़ रूट के रूप में नामक एक फ़ोल्डर भी निर्दिष्ट किया है । इसे .htaccessअपने उप डोमेन फ़ोल्डर में एक फ़ाइल में जोड़ें :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

अंत में, आपको बस अपने उप डोमेन फ़ोल्डर में एक फ़ोल्डर बनाने की आवश्यकता है, फिर उस निर्देशिका में उपडोमेन की फ़ाइलों को रखें।


3

यह .htaccessप्रदान किया जा सकता है बशर्ते कि आपका सर्वर वाइल्डकार्ड सबडोमेन को अनुमति देने के लिए कॉन्फ़िगर किया गया हो। मैंने जस्टहोस्ट में मैन्युअल रूप से एक उप-नाम बनाकर *और सब-डोमेन नामक एक फ़ोल्डर निर्दिष्ट करके वाइल्डकार्ड उप-डोमेन के लिए दस्तावेज़ रूट के रूप में प्राप्त किया। इसे अपनी .htaccessफ़ाइल में जोड़ें :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]

अंत में, अपने उपडोमेन के लिए एक फ़ोल्डर बनाएँ और उपडोमेन फ़ाइलों को रखें।


1

मैं सिर्फ यह जोड़ना चाहता था, कि यदि आप CloudFlare (free) का उपयोग करते हैं, तो आप आसानी से अपने dns को प्रबंधित करने के लिए उनके API का उपयोग कर सकते हैं।


0

PHP और Htaccess का उपयोग करके गतिशील उप डोमेन बनाएँ

(1) मूल ।htaccess

इस फ़ाइल में पुनर्निर्देशन है http://www.yourwebsite.com को http://yourwebsite.com मुख पृष्ठ उपयोग के लिए। सबडोमेन पुनर्निर्देशन के लिए yourwebsite_folder

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.yourwebsite.com
RewriteRule (.*) http://yourwebsite.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^yourwebsite\.com $
RewriteCond %{REQUEST_URI} !^/yourwebsite_folder/
RewriteRule (.*) /yourwebsite_folder/$1

RewriteCond %{HTTP_HOST} ^(^.*)\.yourwebsite.com
RewriteCond %{REQUEST_URI} !^/yourwebsite_folder/
RewriteRule (.*) /yourwebsite_folder/$1

(२) फोल्डर के अंदर ।htaccess

यह फ़ाइल उपडोमेन यूआरएल को फिर से लिख रही है।

http://yourwebsite.com/index.php?siteName=9lessons से http://9lessons.yourwebsite.com

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteRule ^([aA-zZ])$ index.php?siteName=$1
RewriteCond %{HTTP_HOST} ^(^.*)\.yourwebsite.com
RewriteRule (.*) index.php?siteName=%1

अधिक .htaccess टिप्स: Htaccess फाइल ट्यूटोरियल और टिप्स।

index.php

इस फ़ाइल में सरल PHP कोड है, जो उप डोमेन मूल्य को मान्य करने वाले नियमित अभिव्यक्तियों का उपयोग करता है।

<?php
$siteName='';
if($_GET['siteName'] )
{
$sitePostName=$_GET['siteName'];
$siteNameCheck = preg_match('~^[A-Za-z0-9_]{3,20}$~i', $sitePostName);
   if($siteNameCheck)
   {
     //Do something. Eg: Connect database and validate the siteName.
   }
   else
  {
    header("Location: http://yourwebsite.com/404.php");
   }
}
?>
//HTML Code
<!DOCTYPE html>
<html>
<head>
<title>Project Title</title>
</head>
<body>
<?php if($siteNameCheck) { ?>
//Home Page
<?php } else { ?>
//Redirect to Subdomain Page.
<?php } ?>
</body>
</html>

कोई उपडोमेन फ़ोल्डर नहीं

यदि आप रूट निर्देशिका (htdocs / public_html) का उपयोग प्रोजेक्ट निर्देशिका के रूप में कर रहे हैं, तो इस .htaccess फ़ाइल का उपयोग करें।

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} ^www.yourwebsite.com
RewriteRule (.*) http://yourwebsite.com/$1 [R=301,L]

RewriteRule ^([aA-zZ])$ index.php?siteName=$1
RewriteCond %{HTTP_HOST} ^(^.*)\.yourwebsite.com
RewriteRule (.*) index.php?siteName=%1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.