كيفية السماح PHP لإنشاء الفرعي تلقائيا لكل مستخدم ؟

StackOverflow https://stackoverflow.com/questions/183928

  •  06-07-2019
  •  | 
  •  

سؤال

كيف يمكنني إنشاء دومين فرعي مثل http://user.mywebsite.com ?لا بد من الوصول إلى htaccess بطريقة أو بأخرى ؟ هو في الواقع ببساطة من الممكن إنشاء طريق الخالص كود php أو تحتاج إلى استخدام بعض الخارجي النصي من جانب الخادم اللغة ؟

لمن أجاب:حسنا, يجب أن أطلب استضافة إذا أنها توفر نوعا من DNS الوصول??

هل كانت مفيدة؟

المحلول

كنت تبحث عن إنشاء مخصص سجل.

أنا متأكد من أن يمكنك استخدام أحرف البدل عند تحديد السجلات التي من شأنها أن تسمح لك أن تفعل شيئا مثل هذا:

*.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

في أعلاه ، أسماء تقتصر على الحروف a-z


كتابة القاعدة على الاستيلاء على فرعي تبدو مثل هذا:

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

نصائح أخرى

ميزة أنت بعد ما يسمى البدل النطاقات الفرعية.انها تسمح لك ليس لديك إلى الإعداد DNS لكل فرعي بدلا من استخدام apache كتابة من أجل إعادة التوجيه.يمكنك العثور على البرنامج التعليمي لطيفة هنا, ولكن هناك الآلاف من الدروس هناك.هنا هو رمز الضرورية من هذا البرنامج التعليمي:

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

ومع ذلك لأنها تتطلب استخدام VirtualHosts يجب أن يكون في الخادم httpd.الملف conf بدلا من المحلية .htaccess.

وأفعل ذلك تختلف قليلا من الأقسام. أمرر المجال بالكامل والاستيلاء على فرعي في بي.

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 لي أنا فقط تنفجر اسمي الخروج من المضيف. هذا يعطيني لطيفة عناوين المواقع SEO جميلة.

ونحن الإعداد البدل DNS مثل شرحوا أعلاه. لذلك رقما قياسيا هو * .yourname.com

وبعد ذلك كل من النطاقات الفرعية هي في طريقها فعلا إلى نفس المكان، ولكن PHP يعامل كل نطاق فرعي مثل حساب مختلف.

ونحن نستخدم التعليمة البرمجية التالية:

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

وهذا مجرد رمز يحدد المتغير $account نفس المجال الفرعي. ثم هل يمكن استرداد الملفات الخاصة بهم وغيرها من المعلومات بناء على حسابه.

وهذا ربما ليست فعالة مثل الطرق أنها قائمة أعلاه، ولكن إذا لم يكن لديك الوصول لربط و / أو محدودة هتكس هذه الطريقة يجب أن تعمل (طالما المضيف الخاص بك سوف الإعداد البدل بالنسبة لك) .

ونحن فعلا استخدام هذا الأسلوب للاتصال بقاعدة بيانات العملاء لشركة متعددة تطبيق التجارة الإلكترونية، لكنه قد عمل لك أيضا.

ولا ضجة حولها مع ملفات هتكس عندما يمكنك استخدام أباتشي كتلة الظاهري استضافة .

ومن الوثائق:

<اقتباس فقرة>   

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

في طريقة انها على العكس من سؤالك: كل "فرعي" هو المستخدم. حالة عدم وجود المستخدم، وتحصل على 404.

ولكن العائق الوحيد هو أن DOCUMENT_ROOT متغير البيئة لم يتم تعيين بشكل صحيح إلى <م> تستخدم الدليل، ولكن DOCUMENT_ROOT الافتراضي في htconfig دي.

وبسيطة PHP حل لالنطاقات الفرعية وتطبيقات الويب متعددة المجال

والخطوة 1. توفير DNS سجل باسم "*" للنطاقات (أو المجال) التي ستعمل خدمة "example.org"

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

والخطوة 2. تحقق uniquity من تسجيل الدخول عند تسجيل المستخدم أو تغيير تسجيل الدخول. أيضا، وتجنب النقاط في تلك تسجيل الدخول.

والخطوة 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

إذا كنت تحتاج إلى نفس النكات على مختلف المجالات خدمت بشكل مختلف، قد تحتاج إلى تخزين كويس المستخدم للمجال عند تسجيل الدخول.

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

هل يمكن [يحتمل أن] قيام كتابة عنوان الموقع، ولكن نعم: أن يكون لديك التحكم في إعدادات DNS بحيث عند إضافة شخص ما يحصل فرعي خاص بها

.

وبالإضافة إلى التغييرات التكوين على الخادم الخاص بك WWW للتعامل مع فرعي جديد، يحتاج التعليمات البرمجية ليتم إجراء تغييرات على سجلات DNS الخاصة بك. لذلك، إلا إذا كنت تقوم بتشغيل BIND الخاص بك (أو ما شابه)، سوف تحتاج إلى معرفة كيفية الوصول إلى تكوين اسم موفر الخادم. إذا أنها لا تقدم نوعا من API، قد تحصل هذه صعبة.

تحديث: نعم، أود أن تحقق مع المسجل الخاص بك اذا كانا لا يزالان توفر أيضا خدمة الملقم اسم (كما هو الحال في كثير من الأحيان). لم أكن استكشاف هذا الخيار من قبل ولكن أظن معظم المسجلين المستهلك لا. I غوغلد لGoDaddy أو واجهات برمجة التطبيقات وGoDaddy أو واجهات برمجة التطبيقات DNS ولكن لم أكن قادرا على تحويل أي شيء، لذلك أعتقد أن الخيار الأفضل أن يكون من إطلاعك على التعليمات الفورية مع مزود الخاص بك، وإذا كان هذا لا يجيب على السؤال، الحصول على عقد الموظفين دعمهم.

أولا، تحتاج للتأكد من تكوين الملقم الخاص بك للسماح النطاقات الفرعية البدل. لقد حققت ذلك في JustHost عن طريق إنشاء subomain اسمه * يدويا. أنا أيضا تحديد مجلد يسمى 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]

وأخيرا، كل ما عليك القيام به هو إنشاء مجلد في مجلد النطاقات الفرعية الخاصة بك، ثم قم بوضع ملفات فرعي في هذا الدليل.

وهذا لا يمكن أن يتحقق في .htaccess بشرط تكوين الملقم الخاص بك للسماح النطاقات الفرعية البدل. لقد حققت ذلك في JustHost عن طريق إنشاء subomain اسمه يدويا * وتحديد مجلد يسمى النطاقات الفرعية كجذر ثيقة لالنطاقات الفرعية البدل. هذا إضافة إلى ملف .htaccess الخاص بك:

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

وأخيرا، إنشاء مجلد فرعي ووضع النطاقات الفرعية الملفات.

وأنا فقط أريد أن أضيف، أنه إذا كنت تستخدم كلودفلاري (مجاني)، يمكنك استخدام API لإدارة نظام أسماء النطاقات الخاصة بك مع سهولة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top