質問
サインアップしたユーザーに独自のサブドメインを取得してもらいたい Web サイトがあります。このサブドメインは仮想であり、すべてのサブドメインは同じ Web サーバー ファイルを使用します。
私は PHP と Apache を使用しており、仮想ホストについては知っていますが、vhosts コードをどこに配置する必要があるのか疑問に思っています。まず、httpd.conf にアクセスできません。次に、これを登録時に自動的に実行したいと考えています。
仮想ホストについて読んだことがありますが、私の質問に答えられるものは見つかりませんでした。これらすべてがどのように連携するのか説明できる人、または答えがどこで見つかるのか知っている人はいますか?
解決
あなたは余分な.confファイルを読むためにApacheを伝えることはできますか? (伝統的にあなたはHTTPD-vhosts.confであなたのバーチャルホストを保存)
ので、以下のようなものを追加して、あなたのウェブサーバを再起動する場合は、
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /abs/path/to/webroot
ServerName domainname.com
ServerAlias *.domainname.com
<Directory /abs/path/to/webroot>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
その後、PHPで、ユーザーが検査することで要求しているサブドメインを確認できます:
$_SERVER['HTTP_HOST']
すなわち。ユーザーの要求であれば http://user1.domainname.com/index.phpする
$ _、SERVER [ 'HTTP_HOST']がありますuser1.domainname.com
あなたは、など。各セグメントを検査する( ' ' $ _SERVER [' HTTP_HOST']を)爆発することができます。
他のヒント
あなたは、このための3事が必要になります
1。 * .yourDomain.com
のためにあなたのDNSを設定します2。 このドメインのApacheの設定ににServerAliasディレクティブを追加します:
ServerName www.yourDomain.com
ServerAlias *.yourDomain.com yourDomain.com
また、あなたがApacheサーバが(これがデフォルトです)
UseCanonicalName
に設定on
ていることを確認してください
3。 PHPでサブドメイン名をGREPます:
$nameChunks = explode('.', $_SERVER['HTTP_HOST']);
$subDomainName = $nameChunks[count($nameChunks) - 3];
(Janek のコメントに触発されました)
Apache インスタンスが * エイリアシング用に構成されている場合、仮想名前付きホストを作成する必要はありません。$_SERVER['HTTP_HOST'] を評価することで、PHP で偽装できます。
Apache インスタンスがこれを処理できるかどうかを確認するには、ローカルの /etc/hosts ファイル (または Windows の同等ファイル - %SystemRoot%\system32\drivers\etc\hosts) を編集して、目的の仮想名がサーバーを指すようにします。
例えば
# An example HOSTS file.
192.168.1.4 testserver testserver.com subdomain.testserver.com secondname.com
ここでは、192.168.1.4 がサーバーの IP であると仮定しています。それ以降はすべて、サーバーを呼び出すことができるエイリアスです。
次に、Janek が提案したように、 echo $_SERVER['HTTP_HOST']
名前が正しくキャプチャされているかどうかを確認します。その場合、必要なのは DNS の変更だけであり、Apache は変更しないで済みます。
それ以外の場合は、Apache.conf にアクセスできない場合 (これは、多くのものにアクセスできないことを意味します)、これを実行するのは困難です。プログラミングはそうではありませんが、実装はそうなります。
その理由は次のとおりです。
Apache はデフォルトで仮想ホストを提供します。ただし、仮想ホストの「インクルード」ファイルを作成できるように、サーバーの conf ディレクトリ (通常は /etc/httpd/conf.d/ にあります) にアクセスする必要があります (Apache 構成がそれを含めるように設定されている場合 - 最新のインストールでは、なれ)。
Apache をサイクル (再起動) できる必要があります。これがないと、仮想ホストの変更は有効になりません。
DNS を変更できる必要があります。ローカルの /etc/hosts ファイルはいつでも変更できますが、訪問者がサイトにアクセスするには、DNS の変更をプッシュできる必要があります。(これは瞬時に行われる場合もありますが、伝播するまでに 24 時間かかる場合もあります)。
スクリプト作成は確かに実行できます (Cpanel と WHM を参照)
あなたが最初にすべてのあなたのメインのIPアドレスへのすべてのサブドメインを解決するために、セットアップにDNSサーバが必要になります、すなわち*.domain.com
サーバーのIPアドレスに解決する必要があります。そして、Webサーバは、いくつかのPHPスクリプトを呼び出し、同様にかかわらず、サブドメインのすべての着信要求を処理する必要があります。 PHPスクリプトは、単に$_SERVER['HTTP_HOST']
ヘッダから要求されたもののドメインを把握し、それに応じて行動することができます。
あなたは、実際に「ユーザー登録の際にサブドメインを作成」していない。