PHPで各ユーザーのサブドメインを自動的に作成するにはどうすればよいですか?
質問
http://user.mywebsite.com のようなサブドメインを作成するにはどうすればよいですか?どういうわけかhtaccessにアクセスする必要がありますか?純粋なPHPコードを介して作成することは実際に単に可能ですか、または外部のスクリプトサーバー側言語を使用する必要がありますか?
回答者へ:では、ホスティングに何らかのDNSアクセスを提供しているかどうかを尋ねるべきですか?
解決
カスタム 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
他のヒント
後の機能はワイルドカードサブドメイン。これにより、サブドメインごとにDNSをセットアップする必要がなくなり、代わりにリダイレクトにApacheの書き換えを使用できます。 こちら、しかしそこにたくさんの個人指導がある。そのチュートリアルの必要なコードは次のとおりです。
<VirtualHost 111.22.33.55>
DocumentRoot /www/subdomain
ServerName www.domain.tld
ServerAlias *.domain.tld
</VirtualHost>
ただし、VirtualHostsを使用する必要があるため、ローカルの.htaccessではなく、サーバーのhttpd.confファイルで設定する必要があります。
マークとは少し違うことをしています。ドメイン全体を渡し、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が得られます。
上記で説明したように、ワイルドカードDNSをセットアップします。したがって、レコードは* .yourname.comです
その後、すべてのサブドメインは実際には同じ場所に移動しますが、PHPは各サブドメインを異なるアカウントとして扱います。
次のコードを使用します:
$url=上記で説明したように、ワイルドカードDNSをセットアップします。したがって、レコードは* .yourname.comです
その後、すべてのサブドメインは実際には同じ場所に移動しますが、PHPは各サブドメインを異なるアカウントとして扱います。
次のコードを使用します:
<*>
このコードは、サブドメインと同じ $ account
変数を設定するだけです。その後、アカウントに基づいてファイルやその他の情報を取得できます。
これはおそらく上記の方法ほど効率的ではありませんが、BINDにアクセスできない場合や.htaccessが制限されていない場合、この方法は機能します(ホストがワイルドカードを設定する限り) 。
実際には、この方法を使用して、複数企業の電子商取引アプリケーションの顧客データベースに接続しますが、同様に機能する場合があります。
SERVER["REQUEST_URI"];
$account=str_replace(".yourdomain.com","",$url);
このコードは、サブドメインと同じ $ account
変数を設定するだけです。その後、アカウントに基づいてファイルやその他の情報を取得できます。
これはおそらく上記の方法ほど効率的ではありませんが、BINDにアクセスできない場合や.htaccessが制限されていない場合、この方法は機能します(ホストがワイルドカードを設定する限り) 。
実際には、この方法を使用して、複数企業の電子商取引アプリケーションの顧客データベースに接続しますが、同様に機能する場合があります。
Apache mass virtualを使用できる場合は、.htaccessファイルに煩わされないでくださいホスティング。
ドキュメントから:
#ファイル名にサーバー名の一部を含める VirtualDocumentRoot / www / hosts /%2 / docs
ある意味では、あなたの質問の逆です:すべての「サブドメイン」はユーザーです。ユーザーが存在しない場合、404を受け取ります。
唯一の欠点は、環境変数 DOCUMENT_ROOT
が used サブディレクトリに正しく設定されておらず、de htconfigのデフォルトのdocument_rootに設定されていることです。
サブドメインおよびマルチドメインWebアプリ用のシンプルなPHPソリューション
ステップ1. DNS Aレコードを&quot; *&quot;として提供します。 &quot; example.org&quot;
を提供するドメイン(またはドメイン)の場合A record => *.example.org
A record => *.example.net
ステップ2.ユーザーがログインを登録または変更するときに、ログインの統一性を確認します。 また、これらのログインにはドットを避けてください。
ステップ3.次にクエリを確認します
// Request was http://qwerty.example.org
$q = explode('.', サブドメインおよびマルチドメインWebアプリ用のシンプルなPHPソリューション
ステップ1. DNS Aレコードを&quot; *&quot;として提供します。 &quot; example.org&quot;
を提供するドメイン(またはドメイン)の場合
A record => *.example.org
A record => *.example.net
ステップ2.ユーザーがログインを登録または変更するときに、ログインの統一性を確認します。
また、これらのログインにはドットを避けてください。
ステップ3.次にクエリを確認します
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
異なる方法で異なるニックネームで同じニックネームが必要な場合は、
ログインを登録する際にドメインのユーザー選択を保存する必要がある場合があります。
<*>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
}
?>
このソリューションは異なるドメインに対応する可能性があります
<*>異なる方法で異なるニックネームで同じニックネームが必要な場合は、 ログインを登録する際にドメインのユーザー選択を保存する必要がある場合があります。
<*>[潜在的に] URLを書き換えることはできますが、はい:ユーザーが追加されたときに独自のサブドメインを取得できるように、DNS設定を制御する必要があります。
新しいサブドメインを処理するためのWWWサーバーの構成変更に加えて、コードでDNSレコードを変更する必要があります。したがって、独自のBIND(または同様の)を実行していない限り、ネームサーバープロバイダーの構成にアクセスする方法を理解する必要があります。何らかのAPIを提供していない場合、これは扱いにくいかもしれません。
更新:はい、レジストラがネームサーバーサービスも提供しているかどうかを確認します(よくあることです)。これまでこのオプションを検討したことはありませんが、ほとんどの消費者レジストラはそうではないと思います。 GoDaddy APIとGoDaddy DNS APIをGoogleで検索しましたが、何も起動することができなかったので、プロバイダーのオンラインヘルプを確認するのが最善の方法だと思います。サポートスタッフの数。
最初に、ワイルドカードサブドメインを許可するようにサーバーが構成されていることを確認する必要があります。私は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]
最後に、サブドメインフォルダーにフォルダーを作成し、そのディレクトリにサブドメインのファイルを配置するだけです。
これは、サーバーがワイルドカードサブドメインを許可するように構成されている場合、 .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]
最後に、サブドメイン用のフォルダーを作成し、サブドメインファイルを配置します。
追加したいのは、CloudFlare(無料)を使用する場合、APIを使用してDNSを簡単に管理できることです。