171

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

回答者へ: では、私のホスティング会社が何らかの DNS アクセスを提供しているかどうか尋ねるべきでしょうか??

4

11 に答える 11

144

カスタム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

ただし、実際には書き換えルールは必要ありません。HTTP_HOST ヘッダーは PHP でも利用できるので、次のように既に取得できます。

$username = strtok($_SERVER['HTTP_HOST'], ".");
于 2008-10-08T17:49:38.540 に答える
35

あなたが求めている機能はワイルドカードサブドメインと呼ばれます。これにより、サブドメインごとにDNSを設定する必要がなくなり、代わりにリダイレクトにapacherewriteを使用できます。ここで素晴らしいチュートリアルを見つけることができますが、そこには何千ものチュートリアルがあります。そのチュートリアルから必要なコードは次のとおりです。

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

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

于 2010-09-01T11:22:17.587 に答える
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 コードで、ユーザー名をホスト名から切り離します。これにより、きれいな SEO URL が得られます。

于 2008-10-08T18:39:01.093 に答える
16

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

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

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

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

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

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

私たちは実際にこの方法を使用して、複数の会社の電子商取引アプリケーションの顧客データベースに接続しますが、あなたにも役立つかもしれません。

于 2009-03-02T15:12:17.457 に答える
8

Apacheの大量仮想ホスティングを使用できる場合は、.htaccessファイルをいじくりまわさないでください。

ドキュメントから:

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

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

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

于 2008-10-08T23:02:46.723 に答える
6

サブドメインおよびマルチドメイン 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 
于 2014-12-23T19:55:07.697 に答える
4

新しいサブドメインを処理するために WWW サーバーの構成を変更するだけでなく、コードで DNS レコードを変更する必要があります。そのため、独自の BIND (または類似のもの) を実行していない限り、ネーム サーバー プロバイダーの構成にアクセスする方法を理解する必要があります。彼らが何らかの API を提供していない場合、これは扱いにくいものになる可能性があります。

更新: はい、レジストラがネーム サーバー サービスも提供しているかどうかを確認します (よくあることです)。私はこれまでこのオプションを検討したことはありませんが、ほとんどの消費者レジストラはそうではないと思います. GoDaddy API と GoDaddy DNS API を Google で検索しましたが、何も見つけることができませんでした。そのため、プロバイダーのオンライン ヘルプを調べて、質問に対する回答が得られない場合は、保留にするのが最善の方法だと思います。彼らのサポートスタッフの。

于 2008-10-08T17:40:01.057 に答える
4

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

于 2008-10-08T17:40:48.170 に答える