0

メインドメイン(domain.com)を使用するアプリケーションがあり、コードの個別のインスタンスを維持する必要なしに、他のドメインが同じコンテンツを指すことができるようにしたいと考えています。アプリケーションはメインドメインのフォルダに含まれており、このフォルダは検索エンジンなどからアクセスされないため、SEOなどの心配はありません。すべてのドメインはApacheを実行している同じサーバー上にあります。

ドメイン名は、domain.comにリダイレクトするのではなく、ユーザーが最初に入力したままの状態を維持したいと思います。これは、複数の顧客がコードを使用できるようにするためですが、アプリケーションでは、色、ロゴなどを使用してブランド化されています。 MySQLデータベースから取得した設定。

たとえば、ユーザーがnewdomain.comにアクセスすると、/ home / newdomain / public_html内にローカルに保存されているログインフォームが表示されます。ログインに成功すると、newdomainではなくアプリケーションを含む/folderに移動します。空のcom/folderをdomain.com/folder(つまり、/ home / domain / public_html / folder)にリダイレクトしたいのですが、ブラウザーにnewdomain.com/folderが表示されるので、透過的です。

htaccessを使用して以下のhttps://stackoverflow.com/a/9521102/1278201を試しましたが、URLがdomain.comに変更されます。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^ http://www.domain.com/%{REQUEST_URI} [R=301,L]

私はまた、SEOについて心配していないので、Apache configの使用について言及した投稿を見つけましたが、これを使用して1つのフォルダーのみをリダイレクトできるかどうかはわかりません(つまり、webrootをリダイレクトせず、/ folderをリダイレクトするだけです)https ://stackoverflow.com/a/3849129/1278201

NameVirtualHost *

<VirtualHost *>
ServerName domain.com
DocumentRoot /home/domain/public_html/folder
</VirtualHost>

<VirtualHost *>
ServerName newdomain.com
DocumentRoot /home/domain/public_html/folder
</VirtualHost>

また、アプリケーションで使用されているセッションとSSL証明書https://stackoverflow.com/a/140008/1278201で発生する可能性のある問題を指摘する投稿も見つかりました。ドメインごとに個別のSSL証明書をインストールできますが、上記のいずれかが「中断」セッションをリダイレクトできますか?明らかに、誰かがnewdomain.com/folderにログインしてからdomain.com/folderにアクセスすると、再度ログインする必要がありますが、domain.com/folderがnewdomain.com/folderにリダイレクトされているという事実はセッションのセキュリティに影響を与えます。 ?

望ましい結果を達成するための最良の方法は何ですか?

4

2 に答える 2

2

'R=301' の代わりに'P' (proxypass の略) をフラグとして使用できます。

RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [P,L]

また、仮想ホストを単一のものに変更します。

NameVirtualHost *

<VirtualHost *>
    ServerName domain.com
    ServerAlias www.domain.com newdomain.com www.newdomain.com
    DocumentRoot /home/domain/public_html/folder
</VirtualHost>
于 2013-01-02T13:39:19.087 に答える
0

仮想ホスト構成

上記の構成スニペットは、Apache で2 つのvirtualHostsをセットアップするだけです。それぞれが同じ documentRoot を指しています。これは、Web サイトのルート フォルダーとなるフォルダーです。リダイレクトはありません。仮想ホストは正しいソリューションです。

EDIT1 一般的にすべての仮想ホストに同じファイルを使用したいが、単一の例外を除いて、各仮想ホストでmod_rewriteまたはmod_aliasを使用してリクエストを書き換えることができます

たとえばdomain.com/favicon.ico、から読み取ることができますdocument_root/specific/domain.com/favicon.ico

SSL 証明書

顧客がサブドメインを使用してドメインを共有していない限り、仮想ホストごとに SSL 証明書が必要になります。サブドメインを取得しただけの場合は、ワイルドカード証明書 *.yourdomain.com を 1 つ購入できます。

複数のドメインの問題は、異なる SSL 証明書を使用するために vhost ごとに 1 つの IP が必要になることです: How can I setup different SSL-Certificates for vhosts on Apache?

セッション

アプリケーションでドメインを確認する必要があります。Cookie は特定のドメインに対して設定されますが、クライアントは Cookie を操作することでセッションを別のドメインに「移動」することができます。とにかく、すべてのドメインのすべてのユーザーを許可したくないと思うので、資格情報のチェックですでにチェックが必要になります。さらに、ドメインをセッションに保存し、ドメインが変更されたときにセッションを終了できます

session_start();
if ( user_authorized_with_credentials_and_domain ) {
     $_SESSION['sess_domain'] = $_SERVER['HTTP_HOST'];
}

後のリクエストで比較できます

if ( $_SESSION['sess_domain'] !== $_SERVER['HTTP_HOST'] ) {
    session_destroy();
    // redirect to login
}
于 2013-01-02T11:56:22.097 に答える