6

サインアップするユーザーに独自のサブドメインを取得してもらいたい Web サイトがあります。このサブドメインは仮想であり、すべてのサブドメインが同じ Web サーバー ファイルを使用します。

私は PHP と Apache を使用しており、仮想ホストについては知っていますが、vhosts コードをどこに置く必要があるのか​​ 疑問に思っています。まず、httpd.conf にアクセスできません。第二に、登録時にこれを自動的に実行したいと考えています。

仮想ホストについて読んだことがありますが、私の質問に答えるものが見つかりませんでした。これらすべてがどのように連携するかを説明できる人、または答えを見つけることができる場所を知っている人はいますか?

4

4 に答える 4

7

apacheに追加の.confファイルを読み取るように指示できますか?(従来、vhostsはhttpd-vhosts.confに保存します)

その場合は、次のようなものを追加して、Webサーバーを再起動します

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があります

次に、explode('。'、$ _SERVER ['HTTP_HOST'])を使用して、各セグメントを検査できます。

于 2009-12-03T16:23:22.577 に答える
2

これには3つのことが必要です:

1. *.yourDomain.com の DNS を設定します

2. ServerAlias ディレクティブをこのドメインの Apache 構成に追加します。

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];
于 2009-12-03T17:04:12.963 に答える
2

(ジャネックのコメントに触発された)

Apache インスタンスが * エイリアシング用に構成されている場合、仮想名前付きホストを作成する必要はありません。

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 にアクセスできない場合 (この種のことは、多くのものにアクセスできないことを意味します)、これを実行するのは困難です。プログラミングはそうではありませんが、実装はそうです。

理由は次のとおりです。

  1. デフォルトでは、Apache は仮想ホストを提供します。ただし、仮想ホストの「インクルード」ファイルを作成できるように、サーバーの conf ディレクトリ (多くの場合 /etc/httpd/conf.d/ にあります) にアクセスする必要があります (Apache 構成がそれを含めるようにセットアップされている場合 - 最新のインストールではなれ)。

  2. Apache を循環 (再起動) できる必要があります。これがないと、仮想ホストの変更は有効になりません。

  3. DNS を変更できる必要があります。ローカルの /etc/hosts ファイルはいつでも変更できますが、訪問者がサイトにアクセスするには、DNS の変更をプッシュできる必要があります。(これは瞬時に発生する場合もあれば、反映されるまでに 24 時間かかる場合もあります)。

スクリプトは確かに実行できます (Cpanel と WHM を参照)。

于 2009-12-03T16:47:00.623 に答える