サブドメインをアカウントページにルーティングする方法ドメインマスキングはどのように機能しますか? [閉まっている]
-
03-07-2019 - |
質問
パート1
ユーザーがサインアップして使用できるPHP Zend Frameworkアプリケーションを構築したい。彼らが登録するとき、アプリケーションがその公開ページを指すサブドメインを作成して、そのクライアントに固有のコンテンツを提供するようにしたいと思います。
例: http://mywebapp.com/username または http://username.mywebapp.com
更新: <!> quot;サブドメインをアカウントキーとして使用する<!> quot; は、この質問に対する私の質問にほぼ答えた良いチュートリアルです。これには、 Zend_Controller_Router_Route_Hostname
。
しかし、私はまだ疑問に思っています...
質問#1:チュートリアルでは、ワイルドカードサブドメインの設定については言及していません。これを達成するためにこれは必要ですか?ワイルドカードサブドメインを使用する方法はありますか?
パート2
また、ユーザーにドメイン名を登録し、それらのページを指す機能を提供する必要があります。したがって、 http://clientdomain.com にアクセスすると、 http://clientname.mywebapp.com ですが、アドレスバーのURLに http://client1.com 。それは理にかなっていますか?このプロセスはドメインマスキングと呼ばれます。基本的に、ユーザーに無料のドメインマスキングを提供したいと思います。
更新:ドメインリセラーAPIの世界を発見しました。 OpenSRS は見栄えがいいです。推奨するものはありますか?
質問#2:ドメインマスキングはどのように機能しますか?ドメインリセラーAPIで動作しますか?
解決
質問のパート1では、ここで任意のソリューションを実装できます-ただし、ルーターが必要かどうかはわかりません-サイトごとに異なる機能は提供しません-に基づいて異なるコンテンツをロードするだけですURL。これは非常に簡単な方法で処理します。
- bootstrap.phpでサーバーURLを取得する必要があります
- URLを取得し、http://の後と.mywebapp.comの前の部分を削除します
- データベーステーブルでこのプレフィックスを検索し、ユーザーに関する必要な情報またはこのプレフィックスを使用するためのその他の情報を読み込みます
- Zend_Configにオブジェクトを追加すると、サイトの詳細を含む任意のページからアクセスできます(このサイト情報を呼び出します)。
- コントローラーまたはビューを変更して、siteinfoに基づいて異なる応答を行います。取得するデータの変更など
これを処理するにはapacheを変更する必要があります-最も簡単な方法は、デフォルトドメイン(URLが認識されないときに表示されるページ)がアプリケーションに設定されていることを確認することです。
DNSの変更を処理するのはそれほど簡単ではありません。ワイルドカード応答を処理できるDNSサーバーが必要です。
パート2: URL http://grouchal.com を入力すると、これが http://grouchal.yourwebapp.com 。そのためには、grouchal.comの既存のDNSサーバーエントリを更新して、サーバーが見つかるようにする必要があります。
これが実際に機能する良い例をご覧になりたい場合は、ドメインアカウント用のGoogleアプリをセットアップする必要があります。入力したmail.grouchal.comのようなURLがmail.google.com/a/grouchal.comになります。これには、Googleサーバーを指すようにgrouchal.com DNSサーバーを設定する必要がありました。次に、GoogleサーバーはURLを必要なURLに変更するためにリダイレクトを配置します。
上記で提案したソリューションに戻って、ドメイン名が存在するときのプレフィックスをチェックすることに加えて、それを変更します(つまり、 http://grouchal.mywebapp.com ))代替ドメインも検索します。そのため、アドレスにmywebapp.comがない場合、データベースgrouchal.comを検索し、そのデータを使用してサイト情報を設定します。
これは理にかなっていることです-あなたが抱える問題はPHPではなく、ワイルドキャットDNSサーバーをセットアップし、顧客にDNSサーバーを正しく設定させることです。プロジェクトの成功をお祈りします。
他のヒント
まず、あなたは正しいです。アプリの複数のインスタンス/インストールは必要ありません。 Doc Rootを指すように複数のApache仮想ホストをセットアップします。
ServerName www.serverOne.com
DocumentRoot "/htdocs/myapp/public"
SetEnv CONFIG_ENV "serverOne"
ServerName www.serverTwo.com
DocumentRoot "/htdocs/myapp/public"
SetEnv CONFIG_ENV "serverTwo"
すべてのベースURL、パスなどをZend_Config_Xmlファイルの異なるセクションに配置します。
<?xml version="1.0" standalone="yes"?>
<config>
<siteOne>
<base_url>http://www.siteOne.com</base_url>
<image_path>/images/siteOne/</image_path>
<database>
<host>34.23.34.457</host>
<name>siteOne_DB</name>
<user>siteOne</user>
<pass>**********</pass>
</database>
</siteOne>
<siteTwo>
<base_url>http://www.siteTwo.com</base_url>
<image_path>/images/siteTwo/</image_path>
<database>
<host>34.23.34.456</host>
<name>siteTwo_DB</name>
<user>siteTwo</user>
<pass>**********</pass>
</database>
</siteTwo>
</config>
その後、/ public / index.phpで
<?php
require '../common/config/Bootstrap.php';
$bootstrap = new Bootstrap($_SERVER['CONFIG_ENV']);
$bootstrap->runApp();
?>
そしてBootstrap.phpのrunApp()メソッド:
function runApp($env)
{
$root = realpath(dirname(__FILE__) . '/..');
$config = new Zend_Config_Xml($root . '/config.xml', $env);
これは相対リンクで完全に機能し、パターンマッチングは必要ありません:)
Bootstrap.phpファイルがない場合は、<!> ampの作成方法を学ぶことができます。 Manning Pressの<!> quot; Zend Framework In Action <!> quot;でon PDFのダウンロードとしてすぐに利用できる本。苦労して助けてくれました。
Zend FrameworkはMVCパターンを使用するため、単一のモデルとコントローラーを使用し、ドメインごとに異なるビューを作成できます。
ビューをカスタマイズしたら、入力したドメインを検出して正しいビューを表示できます。たとえば、ブートストラップでは、次の方法でドメインを検出できます。
// Bootstrap or controller
$domain = array_reverse(split('[.]', $_SERVER['SERVER_NAME']));
$domain = $domain[1] . '.' . $domain[0];
// Store domain in registry
Zend_Registry::set('domain', $domain);
// Calling the view from the controller
$domain = Zend_Registry::get('domain');
$this->render($domain . 'home');
それはただのアイデアです!