3

1つのウェブホスティングアカウントで複数のドメインをサポートするソリューションを探しています。これはhtaccessで行う必要があります。つまり、domainxを呼び出し、htaccessを使用して、サーバーがドメイン名に対応するサブフォルダーにWebルートを「偽造」するという考え方です。私はすでに「解決策」を持っていますが、これは完全には機能しません。

私が抱えている問題:

  1. (CodeIginiterのbase_url()を使用して)PHPを介してリダイレクトすると、次のようになります。たとえば、「http://www.domein1.nl/domein1.nl/」。
  2. ローカルサーバーでは動作しません。

だから、私が現在使用しているhtaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} domein1.nl$ [NC]
RewriteCond %{REQUEST_URI} !^/domein1.nl/.*$
RewriteRule ^(.*)$ /domein1.nl/$1 [L]

RewriteCond %{HTTP_HOST} domein2.nl$ [NC]
RewriteCond %{REQUEST_URI} !^/domein2.nl/.*$
RewriteRule ^(.*)$ /domein2.nl/$1 [L]

</IfModule>

CodeIgniter PHP-base_url()のコード。サーバー変数「SCRIPT_NAME」は、問題1としてマークされた2番目のドメインフォルダーを追加します。これは、ルートフォルダーが正しく偽造されている場合は発生しません。しかし、それは実際に可能ですか?

if (isset($_SERVER['HTTP_HOST']))
{
$base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
$base_url .= '://'. $_SERVER['HTTP_HOST'];
$base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']);
}

最後になりましたが、hostsファイルを介してリダイレクトしている間は、ローカルサーバーで機能していません。

192.168.2.9 local.domein1.nl
192.168.2.9 local.domein2.nl

すっごく..これらの問題を解決するにはどうすればよいですか?前もって感謝します!

編集:私のローカルサーバーの問題が修正されました..「sudoa2enmodrewrite」がトリックを行いました。

Edit2:ストームドレインはフォルダー構造について始まったので、ここに複数のCIアプリケーションを明確にするための私のものがあります。

メインの.htaccessの場所/webroot

/public_html/.htaccess

domain1:

/application/domain1/ (domain1 application path)
/application/system/ (shared system path)
/public_html/domain1/index.php (CI domain1 index)

domain2:

/application/domain2/ (domain2 application path)
/application/system/ (shared system path)
/public_html/domain2/index.php (CI domain2 index)
4

2 に答える 2

2

あなたが何をしようとしているのかは完全には明らかではありません。完全に制御できないため、VirtualHostsを設定できない同じサーバーを指す複数のドメイン名があるようです。また、単一のアプリケーションでドメインを提供し、URLの一部としてサブフォルダーを持たないようにします(たとえば、URLのホームページとしてhttp://www.domain1.nl/domain1.nlを使用したくない場合)。

もしそうなら、これはうまくいくかもしれません:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} domein1.nl$ [NC]
    RewriteRule ^(.*)$ /domein1/$1 [L]

    RewriteCond %{HTTP_HOST} domein2.nl$ [NC]
    RewriteRule ^(.*)$ /domein2/$1 [L]

</IfModule>

次に、CodeIgniterでルートを作成して、リクエストをルーティングします。

$route["/domein2/(:any)"] = "/domein2/$1";

.htaccess書き換えをローカルで機能させるには、ファイルにドメインを追加する必要があります。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{HTTP_HOST} local.domein1.nl$ [NC]
    RewriteRule ^(.*)$ /domein1/$1 [L]

    RewriteCond %{HTTP_HOST} local.domein2.nl$ [NC]
    RewriteRule ^(.*)$ /domein2/$1 [L]

</IfModule>

次に、base_urlは書き換えられてURLからルーティングされるため、SCRIPT_NAMEは必要ありません。

if (isset($_SERVER['HTTP_HOST']))
{
    $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';
    $base_url .= '://'. $_SERVER['HTTP_HOST']. '/';
}

アップデート。

次のようなドメインごとにCIフォルダがある場合:

/var/www/domain1/index.php
/var/www/domain1/application/
/var/www/domain1/system/

/var/www/domain2/index.php
/var/www/domain2/application/
/var/www/domain2/system/

RewriteCond %{HTTP_HOST} domain1.nl$ [NC]
RewriteRule ^(.*)$ /domain1/$1 [L]

RewriteCond %{HTTP_HOST} domain2.nl$ [NC]
RewriteRule ^(.*)$ /domain2/$1 [L]

あなたのために仕事をする必要があります。

于 2012-11-09T15:11:47.237 に答える
1

まあ、htaccessを介してきちんと行うことは不可能のようです。

まあ、私はそれを「修正」しました。CodeIgniter index.php内の修正:変数$application_folderの宣言を下のコードに置き換えました。

define('DOMAIN', preg_replace(
    "/^(www.|local.)?([^.]+).[^.]+$/i", "\\2",
    $_SERVER['HTTP_HOST']
));

if ( DOMAIN == 'domain2')
    $application_folder = '../application/domain2';
else
    $application_folder = '../application/domain1';

また、システム「url_helper」に小さな変更を加えました。この「static_url()」関数を追加し、画像/ CSS/jsなどを保存したパスにURIを返します。

if ( ! function_exists('static_url'))
{
    function static_url()
    {
        return base_url().'static/'.DOMAIN.'/';
    }
}

私が理解しなければならない唯一のマイナーなことは、robots.txtのようなものを分割する方法です

于 2012-11-09T19:44:10.370 に答える