サインアップ時にユーザー アカウント エリアのサブドメインを Web サイトに作成するシステムを作成したいと考えています。
例: johndoe.website.com
.htaccess ファイルと関係があり、ウェブサイトの別の場所にリダイレクトされる可能性があると思いますか? 私は実際には知りません。しかし、私を始めるための情報は大歓迎です。
サインアップ エリアを作成することは問題ではありません。これは何度も行っています。サブドメインをどこから始めればよいかわかりません。
サインアップ時にユーザー アカウント エリアのサブドメインを Web サイトに作成するシステムを作成したいと考えています。
例: johndoe.website.com
.htaccess ファイルと関係があり、ウェブサイトの別の場所にリダイレクトされる可能性があると思いますか? 私は実際には知りません。しかし、私を始めるための情報は大歓迎です。
サインアップ エリアを作成することは問題ではありません。これは何度も行っています。サブドメインをどこから始めればよいかわかりません。
ServerAlias
DOCで行われますDNS 設定で、などのワイルドカード ドメイン エントリを作成する必要があります*.example.org
。ワイルドカード エントリは次のようになります。
*.example.org. 3600 A 127.0.0.1
ServerAlias
次に、Apache 構成で、 DOCsディレクティブでワイルドカードを指定する vhost コンテナーをセットアップする必要があります。仮想ホスト コンテナーの例:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
$_SERVER
次に、PHP スクリプトで、スーパー グローバル変数を調べることでドメインを見つけることができます。PHP でサブドメインを取得する例を次に示します。
preg_match('/([^.]+)\.example\.org/', $_SERVER['SERVER_NAME'], $matches);
if(isset($matches[1])) {
$subdomain = $matches[1];
}
ここで正規表現を使用して、www.subdomain.example.org または subdomain.example.org 経由でサイトにアクセスできるようにしました。
www. (または他のサブドメイン)の場合、次のように部分文字列を使用できます。
$subdomain = substr(
$_SERVER['SERVER_NAME'], 0,
strpos($_SERVER['SERVER_NAME'], '.')
);
大量仮想ホスティングは、質問が提案するようにアプリケーションに電力を供給しようとするのではなく、通常、多くの異なる Web サイトをホストするために使用するという点で、上記とは少し異なるスキームです。
mod_rewrite ベースの大規模な仮想ホスティング環境については、以前にブログの投稿で説明しました。もちろん、それぞれの Apache マニュアル ページもあります。
Apache には、大規模な仮想ホスティングを処理する内部的な方法もありますが、これは私が使用した mod_rewrite メソッドよりも柔軟性がやや劣ります。これはすべて、Apache Dynamically Configured Mass Virtual Hosting マニュアル ページで説明されています。
最初にすべてのサブドメインを許可してから、サブドメインが有効かどうかを確認できます。例えば:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule !^index\.php$ index.php [L]
内部では、index.php
次を使用してサブドメインを抽出できます。
if (preg_match('/^([^.]+)\.example\.com$/', $_SERVER['HTTP_HOST'], $match)) {
var_dump($match[1]);
}
ただし、これにはすべて、Web サーバーがすべてのサブドメイン名を受け入れる必要があります。
DNS ワイルドカードの設定に加えて、私が過去にこれを解決した方法であるDynamic Mass Virtual Hosting for Apacheをご覧になることをお勧めします。
PHPでやった方が簡単だと思いました。実際には、cPanel 内にサブドメインを作成し、目的のドメイン名の下にフォルダーを作成します。cPanel で手動で行いますが、単純な PHP 関数によって数ミリ秒ですべて完了します。クリックは必要ありません:)
function create_subdomain($subDomain,$cPanelUser,$cPanelPass,$rootDomain) {
// $buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain;
$buildRequest = "/frontend/x3/subdomain/doadddomain.html?rootdomain=" . $rootDomain . "&domain=" . $subDomain . "&dir=public_html/subdomains/" . $subDomain;
$openSocket = fsockopen('localhost',2082);
if(!$openSocket) {
return "Socket error";
exit();
}
$authString = $cPanelUser . ":" . $cPanelPass;
$authPass = base64_encode($authString);
$buildHeaders = "GET " . $buildRequest ."\r\n";
$buildHeaders .= "HTTP/1.0\r\n";
$buildHeaders .= "Host:localhost\r\n";
$buildHeaders .= "Authorization: Basic " . $authPass . "\r\n";
$buildHeaders .= "\r\n";
fputs($openSocket, $buildHeaders);
while(!feof($openSocket)) {
fgets($openSocket,128);
}
fclose($openSocket);
$newDomain = "http://" . $subDomain . "." . $rootDomain . "/";
// return "Created subdomain $newDomain";
}
Mod_vhost_aliasは、これを行うための適切なモジュールです。
1 行で、ディレクトリ ハッシュなどを使用して、適切な場所を調べるように Apache に指示できます。たとえば、次の行です。
VirtualDocumentRoot /http/users/%3.1/%3.2/%3
subdomain.yourdomain.com に対して要求された場合、Apache はドキュメント ルートを /http/users/s/u/subdomain に設定するように指示します。
.htaccess とは関係ありません。サブドメインの DNS レコードと仮想ホスティングを設定する必要があります。
Apache の Dynamic Mass Virtual Hosting を使用したワイルドカード DNS も妥当なソリューションだと思います。とはいえ、私は試したことはありません。
複数のサーバーにスケールアウトする必要がある場合、または他のソリューションがうまくいかない場合は、データベース駆動の DNS サーバーを使用することをお勧めします。過去にMyDNSを使用して成功しました。MySQL (または PostgreSQL) を使用しているため、DNS を PHP などでオンザフライで更新できます。コードはしばらく更新されていないように見えますが、これは DNS であるため、正確には最先端ではありません。