1

彼ら!

やりたいことを説明します。誰かがこれを手伝ってくれるなら、アドバイスをください。

私はウェブサイトを持っています。それをhttp://mysite.comと呼びましょう。そしてサブドメイン、たとえばhttp://myname.mysite.comとしましょう。

mysite.com と myname.mysite.com のそれぞれの個人データ (ICQ 番号の例) を含む構成ファイル inc.php が 1 つあります。mysite.com ディレクトリにあるすべての一般的な Web サイト ファイル。

サブドメインで完全に類似したファイルを作成しないように、サブドメイン myname.mysite.com で mysite.com のすべての一般的なファイルを作成できるようにしたいと考えています。ただし、個々の ICQ 番号を含む myname.mysite.com にある個々の構成ファイルを含めます。

これは、私がこれをどのように機能させたいかの例です:

  1. メイン ドメイン "mysite.com" には、次のページを含むルート フォルダー "public_html" があります。そのため、「mysite.com」Web サイトを検索すると、inc.php からの ICQ 番号が表示されます。

  2. サブドメイン「myname.mysite.com」にはフォルダー「public_html/subdomain/myname」があり、ICQ 番号「222-222」の構成ファイル inc.php のみがあります。したがって、myname.mysite.com にアクセスすると、「mysite.com」の Web ページが表示されますが、ICQ 番号は「public_html/subdomain/myname/inc.php」から取得されます。アドレス バーには、Web ページが次のように表示されます 。 http://myname.mysite.com/index.php http://myname.mysite.com/about.php http://myname.mysite.com/articles.php

そのため、訪問者は自分が個々の Web サイト myname.mysite.com をサービス提供していると考えますが、実際には、訪問者は mysite.com Web ページをサービス提供します。したがって、mysite.com のコンテンツを変更すると、myname.mysite.com のコンテンツも変更されます。

パートナーに個人のサブドメイン名を与えるアフィリエイト プログラムを組織したいので、このすべてのスタッフが必要ですが、コンサルティングには ICQ 番号が必要な個人の構成ファイル inc.php を使用します。

自分がやりたいことを説明しようとしたと思います。神様、この状況を説明するのは難しいです。ああ、言い忘れていましたが、これはすべて PHP で行いたいことです。

4

2 に答える 2

1

変更したいのがinc.phpファイルだけの場合は、少し異なる構造にすることをお勧めします(以下のコードは、subdomain.mysite.comなどの1レベルのサブドメインのみを想定しており、ポイント(3)と(4)にいくつかの変更を加えるとsub.subdomain.mysite.comなどのより深いサブドメインに必要です)。

1)Apache仮想ホスト構成で、すべてのサブドメインをメインドメインのエイリアスとして定義します。

<VirtualHost *:80>
    ...

    SernarName mysite.com
    ServerAlias *.mysite.com

    ...
</VirtualHost>

2)すべてのサブドメインのすべてのPHPファイルを1つのディレクトリに置き、Apache構成がそのディレクトリを指すようにします。

3)そのディレクトリに、、などのファイルの束を作成incinc.phpます。inc-subdomain1.phpinc-subdomain2.php

4)サイト内の他のすべてのファイルからインクルードするある種のconfig.phpファイルを用意し、次のようなファイルを含めます。

if(isset($_SERVER['HTTP_HOST'])) {
    $host = explode('.', strtolower($_SERVER['HTTP_HOST']));
    if(count($host) == 3) {   //have something more than just mysite.com
        $subdomain = $host[0];
        if($subdomain == 'www') {     //www.mysite.com is the same as just mysite.com
            $subdomain == '';
        }
    }
    else {      //if just mysite.com, then no subdomains
        $subdomain = '';
    }
}
else {  //if no http_host info exists, then assume it's just mysite.com
    $subdomain = '';
}

$incfile = 'inc' . ($subdomain == '' ? '' : "-$subdomain") . '.php';
if(!file_exists($incfile)) {    //if no include file for the requested subdomain, just use mysite.com
    $incfile = 'inc.php';
}

require_once($incfile);

さて、もちろん、これらすべてはあなたに多くの柔軟性を与えるでしょう、しかしあなたが必要とするすべてがただ異なるICQ番号であるならば、必要ではないかもしれません。その場合、ポイント(4)のコードを変更して、インクルードファイルを1つだけにします。たとえばinc.php、そのファイルには次のようなものがあります。

$icq_default = '111-111';
$icq_nums = array('subdomain1' => '222-222',
                  'subdomain2' => '333-333',
                  ...);

if(isset($_SERVER['HTTP_HOST'])) {
    $host = explode('.', strtolower($_SERVER['HTTP_HOST']));
    if(count($host) == 3) {   //have something more than just mysite.com
        $subdomain = $host[0];
        if($subdomain == 'www') {     //www.mysite.com is the same as just mysite.com
            $subdomain == '';
        }
    }
    else {      //if just mysite.com, then no subdomains
        $subdomain = '';
    }
}
else {  //if no http_host info exists, then assume it's just mysite.com
    $subdomain = '';
}

$required_number = isset($icq_numbers[$subdomain]) ? $icq_numbers[$subdomain] : $icq_default;
于 2012-03-29T14:07:29.297 に答える
1

サブドメイン間で異なる小さな設定が実際に 1 つ (または数個) しかない場合は、同じドキュメント/Web ルートからすべてのサブドメインを提供することを検討する必要があります。これは、vhost 構成を微調整して行います。Apache では、次のようになります (想定NameVirtualHost *:80):

<VirtualHost *:80>
  ServerName mysite.com
  ServerAlias *.mysite.com
  DocumentRoot /var/www/websites/mysite
</VirtualHost>

次に、コード内から、サブドメインを使用して使用 (またはオーバーライド) する設定を決定できます。サブドメインは次のように決定できます。

$domain = !empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
$subdomain = implode('.', explode('.', $domain, -2));

次に、 を使用して、使用する$subdomain設定を決定します。

実装の選択はニーズに応じて非常に主観的なものになるため、サブドメインに応じてどの設定を使用するかを決定する方法について、サンプル コードを提供するつもりはありません。


編集 - 最初のコメントでの OP からの質問への回答

仮想ホスト構成に絶対に入れることができない場合ServerAlias *.mysite.comでも、とにかく同様に機能させる簡単な方法があるかもしれません: ドキュメント/Web ルートにシンボリックリンクを使用します。

したがって、myname.mysite.com に /var/www/websites/myname.mysite.com のドキュメント/Web ルートがあり、mysite.com に /var/www/websites/mysite.com のドキュメント/Web ルートがあるとします。

次に、/var/www/websites/myname.mysite.com を Web サーバー上の /var/www/websites/mysite.com へのシンボリック リンクにします。

cd /var/www/websites/
ln -s mysite.com myname.mysite.com

これにより、myname.mysite.com に対して Apache によって使用/提供されるファイルが、サーバー上の mysite.com のファイルと同じ場所から取得されるようになります。


編集 - cPanel用

さて、私は今、cPanel が不自由であると確信しています。

すでに mod_proxy を有効にしている場合は、各ルート .htaccess でこれを行うことができます

RewriteRule ^([^/]*)(/?)(.*) http://mysite.com/$1$2$3 [L,P]

もちろん、これは https 経由で入ってくるリクエストを考慮していません。myname.mysite.com の Web/ドキュメント ルートにあるシンボリック リンクにすべてのリクエストを送信することで、mod_proxy の使用を回避できますが、シンボリック リンクの作成の問題に戻ります。ドキュメント/Web ルート自体のシンボリック リンクを作成するよりも、ドキュメント/Web ルートでシンボリック リンクを取得する方が簡単な場合があります。

これがあなたにいくつかのアイデアを与えたことを願っています。思い通りに動作させるには、cPanel が提供する以上のことを行う必要があるようです。

于 2012-03-29T14:19:04.323 に答える