サインアップ時に、ユーザーアカウントエリア用にWebサイトにサブドメインを作成するシステムを作成したいと考えています。
例えばjohndoe.website.com
私はそれが.htaccessファイルと何か関係があると思いますし、おそらくウェブサイト上の別の場所にリダイレクトしますか?私は実際には知りません。しかし、私を始めるための情報は大歓迎です。
サインアップエリアを作成することは問題ではありません。これを何度も行いました。サブドメインでどこから始めればいいのかわかりません。
ServerAlias
DOCDNS設定で、*.example.org
などの ワイルドカードドメインエントリ を作成する必要があります。ワイルドカードエントリは次のようになります。
*.example.org. 3600 A 127.0.0.1
次にApache構成で、 ServerAlias
でワイルドカードを指定するvhostコンテナを設定する必要があります DOC ディレクティブ。 vhostコンテナの例:
<VirtualHost *:80>
ServerName server.example.org
ServerAlias *.example.org
UseCanonicalName Off
</VirtualHost>
次に、PHPスクリプトで$_SERVER
スーパーグローバル変数を調べることでドメインを見つけることができます。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 動的に設定された大容量仮想ホスティングマニュアルページ で説明されています。
最初にすべてのサブドメインを許可してから、サブドメインが有効かどうかを確認できます。例えば:
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ワイルドカードの設定に加えて、 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";
}
最も簡単な方法は、/ wwwrootを指すようにすべてのサブドメインを(ワイルドカード*を使用して)リダイレクトすることです。次に、次のコードを使用して.htaccessをこのフォルダーに配置します。
RewriteCond %{ENV:REDIRECT_SUBDOMAIN} =""
RewriteCond %{HTTP_Host} ^([a-z0-9][-a-z0-9]+)\.domain\.com\.?(:80)?$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1 -d
RewriteRule ^(.*) %1/$1 [E=SUBDOMAIN:%1,L]
RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]
これにより、/ wwwrootフォルダーのすべてのサブフォルダーがサブドメイン(foldername.domain.com)を介して受け入れ可能になります。
数年前に http://www.webmasterworld.com/Apache/3163397.htm で見つかりました
Mod_vhost_alias はこれを行うための正しいモジュールです。
1行で、Apacheにディレクトリハッシュなどを使用して適切な場所を見るように指示できます。たとえば、次の行
VirtualDocumentRoot /http/users/%3.1/%3.2/%3
subdomain.yourdomain.comに対して要求されたときに、ドキュメントルートを/ http/users/s/u/subdomainに設定するようにApacheに指示します。
.htaccessとは何の関係もありません。サブドメインのDNSレコードと仮想ホスティングを設定する必要があります。
ApacheのDynamic Mass Virtual Hostingを使用したワイルドカードDNSも合理的なソリューションだと思います。しかし、私はそれを試したことがない。
複数のサーバーにスケールアウトする必要がある場合、または他のソリューションがうまく機能しない場合は、データベース駆動のDNSサーバーを使用することをお勧めします。過去に MyDNS を使用しました。 MySQL(またはPostgreSQL)を使用しているため、PHPなど)を使用してDNSをオンザフライで更新できます。コードはしばらく更新されたようには見えませんが、 DNS。したがって、エッジを正確に切断しません。