পিএইচপি কীভাবে প্রতিটি ব্যবহারকারীর জন্য স্বয়ংক্রিয়ভাবে সাবডোমেন তৈরি করতে দেয়?


162

আমি কীভাবে http://user.mywebsite.com এর মতো সাবডোমেন তৈরি করব ? আমার কি কোনওভাবে htaccess অ্যাক্সেস করতে হবে? খাঁটি পিএইচপি কোডের মাধ্যমে এটি তৈরি করা কি আসলেই সম্ভব বা আমার কিছু বাহ্যিক স্ক্রিপ্ট-সার্ভার পাশের ভাষা ব্যবহার করা দরকার?

যারা জবাব দিয়েছে তাদের জন্য: ঠিক আছে, তবে আমি কি আমার হোস্টিংকে জিজ্ঞাসা করব যদি তারা কোনও ধরণের ডিএনএস অ্যাক্সেস সরবরাহ করে ??


সাবডোমেন রাউটিং (চিহ্নের উত্তর) ইতিমধ্যে সক্রিয় করা থেকে সম্ভবত আপনার সরবরাহকারীকে ডিএনএস অ্যাক্সেসের জন্য জিজ্ঞাসা করার প্রয়োজন নেই! সাবডোমেনগুলি আপনাকে কোনও ফলাফল দিলে কেবল আপনার ব্রাউজারে চেষ্টা করুন। এবং তারপরে তাদের .htaccess ফাইল দিয়ে রুট করুন।
Powtac

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

উত্তর:


135

আপনি একটি কাস্টম এ রেকর্ড তৈরি করতে চাইছেন ।

আমি নিশ্চিত যে আপনি ওয়াইল্ডকার্ডগুলি কোনও রেকর্ড নির্দিষ্ট করার সময় ব্যবহার করতে পারবেন যা আপনাকে এরকম কিছু করতে দেয়:

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1 আপনার ওয়েবসারভারের আইপি ঠিকানা হবে। আসলে রেকর্ড যুক্ত করার পদ্ধতিটি আপনার হোস্টের উপর নির্ভর করবে।


Http://mywebsite.com/user এর মতো এটি করা কোনও বিকল্প হলে সেটআপ করা অনেক সহজ হবে be

তারপরে আপনি কেবল একটি .htaccess ফাইল যুক্ত করতে পারেন যা দেখতে এটির মতো দেখাচ্ছে:

Options +FollowSymLinks

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

উপরের দিকে, ব্যবহারকারীর নামগুলি অ্যাজ অক্ষরের মধ্যে সীমাবদ্ধ


সাবডোমেন দখলের জন্য পুনর্লিখনের নিয়মটি এরকম দেখতে পাবেন:

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

1
প্রতিটি সাবডোমেন যদি অন্য সার্ভারের বাইরে পরিবেশন না করা হয় তবে আমি ক্যানোনিকাল নেম (সিএনএম) রেকর্ড তৈরি করা আরও ভাল পরিকল্পনা করব। en.wikipedia.org/wiki/List_of_DNS_record_types
theraccoonbear

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

@ থেরাকাকুনবার মনে করে আপনি সিএনএমে ওয়াইল্ডকার্ডও ব্যবহার করতে পারেন, এটি একটি চিন্তাভাবনা।
মার্ক বাইক

3
আমি আরও নির্দিষ্ট করা উচিত ছিল। .htaccess আইপিএস নয়, অ্যাপাচি-র জন্য। আমি নিশ্চিত নই যে ইউআরএল পুনর্লিখন কীভাবে আইআইএস-এর সাথে পরিচালিত হয় তবে আমি বিশ্বাস করি এসও নিয়ে সেখানে কিছু প্রশ্ন ছিল।
মার্ক বাইক

1
হাই চিহ্ন, আমি পদক্ষেপ আপনি উপরের দিলেন অনুসৃত কিন্তু যখন আমি কি xyz.mydomain.com এটি পুননির্দেশনা xyz.mydomain.com/cgi-sys/defaultwebpage.cgi কিছু ... করতে না আমি প্রয়োজন আর তারপর উপরে উল্লিখিত পদক্ষেপ ?
আশীষ রাজন

30

আপনি যে বৈশিষ্ট্যটির পরে রয়েছেন তাকে ওয়াইল্ডকার্ড সাবডোমাইনস বলে । এটি আপনাকে প্রতিটি সাবডোমেনের জন্য ডিএনএস সেটআপ না করার অনুমতি দেয় এবং পরিবর্তে পুনর্নির্দেশের জন্য অ্যাপাচি পুনর্লিখনগুলি ব্যবহার করতে পারে। আপনি এখানে একটি সুন্দর টিউটোরিয়াল খুঁজে পেতে পারেন , কিন্তু সেখানে হাজার হাজার টিউটোরিয়াল রয়েছে। এই টিউটোরিয়াল থেকে প্রয়োজনীয় কোড এখানে:

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

তবে ভার্চুয়ালহোস্টগুলির ব্যবহারের প্রয়োজন হিসাবে এটি অবশ্যই স্থানীয় .htaccess এর পরিবর্তে সার্ভারের httpd.conf ফাইলে সেট করা উচিত।


আমি শেয়ার্ড হোস্টিংয়ে থাকায় আমি httpd.conf ফাইলে পৌঁছতে পারছি না। আমি কি করতে পারি?
ওয়েবার ডিপোর

23

আমি মার্কের থেকে কিছুটা আলাদা করি। আমি সম্পূর্ণ ডোমেন পাস এবং পিএইচপি মধ্যে সাবডোমেন দখল।

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

এটি আমার সূচক.এফপি ফাইলটিতে চিত্র এবং মানচিত্রের সমস্ত কিছু উপেক্ষা করে। তাই যদি আমি যাই

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

আমি ফিরি

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

তারপরে আমার ইনডেক্স.এফপি কোডে আমি কেবলমাত্র হোস্টনামের বাইরে আমার ব্যবহারকারীর নামটি বিস্ফোরিত করব। এটি আমাকে সুন্দর সুন্দর SEO URL দেয়।


14

তারা উপরে বর্ণিত মত আমরা ওয়াইল্ডকার্ড ডিএনএস সেটআপ করি। সুতরাং রেকর্ডটি হল * .yourame.com

তারপরে সমস্ত সাবডোমেনগুলি একই জায়গায় চলেছে তবে পিএইচপি প্রতিটি সাবডোমেনকে আলাদা অ্যাকাউন্ট হিসাবে বিবেচনা করে।

আমরা নিম্নলিখিত কোড ব্যবহার করি:

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

এই কোডটি কেবল $accountভেরিয়েবলটিকে সাবডোমেনের মতোই সেট করে । তারপরে আপনি তাদের অ্যাকাউন্টের ভিত্তিতে তাদের ফাইল এবং অন্যান্য তথ্য পুনরুদ্ধার করতে পারেন।

এটি সম্ভবত তারা উপরে তালিকাভুক্ত পদ্ধতিগুলির মতো দক্ষ নয়, তবে আপনার যদি BIND এবং / অথবা সীমাবদ্ধ .htaccess অ্যাক্সেস না থাকে তবে এই পদ্ধতিটি কার্যকর হওয়া উচিত (যতক্ষণ না আপনার হোস্ট আপনার জন্য ওয়াইল্ডকার্ড সেটআপ করবে)।

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


2
আমি মনে করি এটি খাঁটি উত্তর হতে পারে, যেমন পিএইচপি কীভাবে সাবডমিনগুলি পরিচালনা করে সে সম্পর্কে জিজ্ঞাসা করুন কীভাবে ওয়েব বা ডিএনএস সার্ভার সাবডোমেনগুলি পরিচালনা করে।
সালেম

8

আপনি যখন অ্যাপাচি ভর ভার্চুয়াল হোস্টিং ব্যবহার করতে পারেন তখন .htaccess ফাইলগুলি নিয়ে চলাফেরা করবেন না ।

ডকুমেন্টেশন থেকে:

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

একভাবে এটি আপনার প্রশ্নের বিপরীত: প্রতিটি 'সাবডোমেন' ব্যবহারকারী a ব্যবহারকারীর অস্তিত্ব না থাকলে আপনি একটি 404 পান।

একমাত্র ত্রুটিটি হ'ল পরিবেশের পরিবর্তনশীল DOCUMENT_ROOTসঠিকভাবে ব্যবহৃত সাবডাইরেক্টরিতে সেট করা হয়নি তবে ডি এইচটিঙ্কফিগের ডিফল্ট ডকুমেন্ট_রোট।


1
আমি কীভাবে এটি ব্যবহার করব তা নিশ্চিতভাবে জানি না ... এবং শেষ পর্যন্ত, কেন htaccess নিয়ে গণ্ডগোল করবেন না?
স্কুটা

6

সাবডোমেন এবং মাল্টি-ডোমেন ওয়েব অ্যাপ্লিকেশনগুলির জন্য সহজ পিএইচপি সমাধান

পদক্ষেপ 1. আপনি "উদাহরণ.org" পরিবেশন করবেন এমন ডোমেনগুলির (বা ডোমেন) জন্য "*" হিসাবে একটি রেকর্ড প্রদান করুন

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

আপনার যদি ভিন্ন ভিন্নভাবে পরিবেশন করা বিভিন্ন ডোমেনগুলিতে একই নিক প্রয়োজন হয় তবে লগইন রেজিস্টার করার সময় আপনাকে ডোমেনের জন্য ব্যবহারকারীর পছন্দ পছন্দ করতে পারে।

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

4

আপনি [সম্ভাব্য] ইউআরএলটির পুনর্লিখন করতে পারতেন, তবে হ্যাঁ: আপনার নিজের ডিএনএস সেটিংসের নিয়ন্ত্রণ রাখতে হবে যাতে কোনও ব্যবহারকারী যুক্ত হয়ে গেলে এটি তার নিজস্ব সাবডোমেন পান।


4

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

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


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

আমি কেবল যুক্ত করতে চেয়েছিলাম, আপনি যদি ক্লাউডফ্লেয়ার (ফ্রি) ব্যবহার করেন তবে আপনি সহজেই আপনার ডিএনএস পরিচালনা করতে তাদের এপিআই ব্যবহার করতে পারেন।


0

পিএইচপি এবং এইচটিসেস ব্যবহার করে ডায়নামিক সাবডোমেনগুলি তৈরি করুন

(1) রুট .htaccess

হোম ফাইলের ব্যবহারের জন্য এই ফাইলটি http://www.yourwebsite.com থেকে http://yourwebsite.com এ পুনঃনির্দেশ is আপনার ওয়েবসাইট_ফোল্ডারে সাবডোমেন পুনঃনির্দেশের সমস্ত

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

(2) ফোল্ডারের ভিতরে .htaccess cess

এই ফাইলটি সাবডোমেন ইউআরএলগুলি পুনরায় লিখছে।

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