web-dev-qa-db-ja.com

PHPに各ユーザーのサブドメインを自動的に作成させる方法は?

http://user.mywebsite.com のようなサブドメインを作成するにはどうすればよいですか?どういうわけかhtaccessにアクセスする必要がありますか?純粋なPHPコードを介して作成することは実際に単に可能ですか、または外部のスクリプトサーバー側の言語を使用する必要がありますか?

答えた人に:では、ホスティングに何らかのDNSアクセスを提供するかどうかを尋ねるべきですか?

155
Skuta

カスタムAレコードを作成しようとしています。

Aレコードを指定するときにワイルドカードを使用して、次のようなことができると確信しています。

*.mywebsite.com       IN  A       127.0.0.1

127.0.0.1はWebサーバーの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
131
Mark Biek

後の機能は Wildcard Subdomains と呼ばれます。これにより、サブドメインごとにDNSをセットアップする必要がなくなり、代わりにリダイレクトにApacheリライトを使用できます。 Niceチュートリアル here を見つけることができますが、そこには何千ものチュートリアルがあります。そのチュートリアルから必要なコードは次のとおりです。

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

ただし、VirtualHostsを使用する必要があるため、ローカルの.htaccessではなく、サーバーのhttpd.confファイルで設定する必要があります。

29
balupton

私はマークとは少し違います。ドメイン全体を渡し、サブドメインを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コードで、hostNameからユーザー名を展開します。これにより、すてきなSEO URLが得られます。

23
gradbot

上記で説明したように、ワイルドカードDNSをセットアップします。したがって、レコードは* .yourname.comです

その後、すべてのサブドメインは実際には同じ場所に移動しますが、PHPは各サブドメインを異なるアカウントとして扱います。

次のコードを使用します。

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

このコードは、サブドメインと同じ$account変数を設定するだけです。その後、アカウントに基づいてファイルやその他の情報を取得できます。

これはおそらく上記の方法ほど効率的ではありませんが、BINDにアクセスできない場合や.htaccessが制限されていない場合、この方法は機能します(ホストがワイルドカードを設定する限り)。

実際にこの方法を使用して、複数企業のeコマースアプリケーションの顧客データベースに接続しますが、同様に機能する場合があります。

14
Gordon

Apache mass virtual hosting を使用できる場合は、.htaccessファイルで大騒ぎしないでください。

ドキュメントから:

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

ある意味では、それはあなたの質問の逆です:すべての「サブドメイン」はユーザーです。ユーザーが存在しない場合、404を受け取ります。

唯一の欠点は、環境変数DOCUMENT_ROOTusedサブディレクトリに正しく設定されていないことですが、de htconfigのデフォルトのdocument_rootです。

8
Willem

サブドメインおよびマルチドメインWebアプリ向けのシンプルなPHPソリューション

手順1.「example.org」を提供するドメイン(またはドメイン)のDNS Aレコードを「*」として指定します

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 
6
Alex Khimich

新しいサブドメインを処理するためのWWWサーバーの構成変更に加えて、コードでDNSレコードを変更する必要があります。したがって、独自のBIND(または同様の)を実行している場合を除き、ネームサーバープロバイダーの構成にアクセスする方法を理解する必要があります。何らかのAPIを提供していない場合、これは扱いにくいかもしれません。

更新:はい。登録会社がネームサーバーサービスも提供しているかどうかを確認します(よくあることです)。これまでこのオプションを検討したことはありませんが、ほとんどの消費者レジストラはそうではないと考えています。 GoDaddy APIとGoDaddy DNS APIをGoogleで検索しましたが、何も起動することができなかったので、プロバイダーのオンラインヘルプを確認するのが最善の方法だと思います。サポートスタッフの。

4
theraccoonbear

[潜在的に] URLを書き換えることはできますが、はい:ユーザーが追加されたときに独自のサブドメインを取得できるように、DNS設定を制御する必要があります。

4
warren

まず、サーバーがワイルドカードサブドメインを許可するように構成されていることを確認する必要があります。 *という名前のサブオマインを手動で作成することで、JustHostでそれを実現しました。ワイルドカードサブドメインのドキュメントルートとして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
Dan Bray

これは、サーバーがワイルドカードサブドメインを許可するように構成されている場合、.htaccessで実現できます。 JustHostで*という名前のサブオマインを手動で作成し、サブドメインというフォルダーをワイルドカードサブドメインのドキュメントルートとして指定することでそれを実現しました。これを.htaccessファイルに追加します。

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

最後に、サブドメイン用のフォルダーを作成し、サブドメインファイルを配置します。

2
Dan Bray

追加したいのは、CloudFlare(無料)を使用すれば、そのAPIを使用してDNSを簡単に管理できることです。

1
kiwixz