2012-04-01 13 views
12

私はドメイン名:TestSite.comを持っています。私はなど、このサイトのいくつかのサブドメインを作成し、first.TestSite.com、second.TestSite.comとしてそれらを参照してください名前をハードコードせずにメインドメインを参照する方法は?

私はハードコードにその名前を持たずにTestSite.com 比較的を参照してくださいするにはどうすればよいです最初の.TestSite.comのhtmlまたはaspxファイル?私がテストサイト/最初

テストサイトとサブフォルダは最初のフォルダを持っている場合、私は何を意味することは、最初から私は

によってその親テストサイトフォルダを参照することができ、(一例として、フォルダを使用して)であります

../

私はfirst.TestSite.comからTestSite.comを参照するために使うのですか?ありがとう。

+2

フォルダはネストされた階層です。サブドメインはそうではありません。サブドメインは、javascriptとcookieとSSL証明書に問題を引き起こす可能性があります。それは画像キャッシングのようなものにも問題を導入することができます - blank.text.comからのblank.gifはtestsite.comのblank.gifと同じ画像ですか?それはブラウザにはない。 –

+0

サブドメインは、検索エンジンのスパイダーとランキングに問題を引き起こす可能性があります。 –

+0

@BrianWhiteは正しいSSLです。さらに、SSLは1つのIPアドレス(Apacheの場合)でのみ動作します。したがって、各サブドメインのSSL証明書を購入するお金があったとしても、独自のIPを持つ必要があります。 ISPの制限に応じて可能ではない可能性があります。 – cgTag

答えて

11

純粋な相対リンクを使用する方法はありません。文字列操作としてプログラムする必要があります。

のような何か:

var host = location.host; 
var lastPeriod = host.lastIndexOf("."); 
var remainder = host.substring(0, lastPeriod); 
var afterSecondLastPeriod = remainder.lastIndexOf('.') + 1 
var baseDomain = host.substring(afterSecondLastPeriod); 
console.log(baseDomain); 

EDIT:正規表現を使用して短いバージョン:

var baseDomain = host.match(/[^.]*\.[^.]*$/)[0] 

これは一般的なので、それは常に最後の部分を返します。 a.TestSite.comb.a.TestSite.comなどと関係なく、TestSite.comが返されます。

この前提が正しくない場合は、修正する必要があります。

5

相対リンクを維持する場合は、base要素を使用できます。

[基本要素のhref]属性は、相対URIを解決するために、ベースとなる絶対URIを指定します( )。

ので、base要素を追加し、あなたが希望hrefを指定し、ページ上のすべての相対URIは、今あなたがベース URIとして指定したURIを使用します。

<head> 
   <base href="http://testsite.com" /> 
</head> 

これだけです。しかし、少し洗練されたものにしたい場合は、System.Configuration. ConfigurationManager . AppSettingsを使ってweb.configからそのURIを取得することができます。

<head> 
   <base href="<%= ConfigurationManager.AppSettings["rootdomain"] %>" /> 
</head> 

そしてweb.configファイル:ここでのaspx抜粋です

<configuration> 
    <appSettings> 
    <add name="rootdomain" value="http://testsite.com" /> 
    </appSettings> 
</configuration> 

この方法は、あなたが、その値がweb.configファイルから駆動することができるから、多くの要素に影響を与えることができます。

1

あなたの質問にはASPタグが付けられています。NET、私はあなたがこのサーバー側をやりたいと思うつもりだから、HTML側のリンクを生成するためにクライアント側のJavaScriptに頼っているわけではありません。あなたのASPXページでこの設定を使用して

<configuration> 
    <appSettings> 
    <add name="MainDomain" value="example.com" /> 
    </appSettings> 
</configuration> 

、あなたのサブドメインの1つ上のハイパーリンク:

まず第一に、あなたは、サブドメインのサイトでweb.configファイルを持っていることを確認し、コンフィギュレーションにこれを追加"ページは次のようになります。

<a href="<%$ AppSettings: MainDomain %>">Go to main domain home page</a> 
<a href="<%$ AppSettings: MainDomain %>/products.aspx">Go to products page on the main domain</a> 

name="MainDomain"との設定は、設定ファイルから読み込まれ、それが<%$ AppSettings: MainDomain %>を言うページに挿入されます。このようにして、ハードコーディングを必要とせずに、サーバー側で必要なHTMLを作成しています。

名前を変更する必要がある場合は、設定ファイルを更新するだけで、すべてのページが自動的に新しいドメイン名を使用します。

1

代替ソリューションは、ライブサーバーの元のドメイン名を使用することですが、開発環境を指すようにします。

このファイルに行を追加することで、WindowsのDNSルックアップを無効にできます。

C:\ WINDOWS \ System32 \ Drivers \ Etc \ Hostsに

は、テキストエディタを使用して、以下を追加します。

127.0.0.1 www.livesite.com 
127.0.0.1 first.livesite.com 
127.0.0.1 second.livesite.com 

これらのドメインはlocahostにマップされます。したがって、テストのためにHTMLをハックする必要はありません。

+1

警告、複数のドメインを127.0.0.1に設定すると、私は奇妙な方法で常に問題を引き起こします。私が直面していた複雑な問題に対する単純な解決策であることは決して決してありませんでした。私はさまざまな状況でそれを試して、いつもそれを元に戻してしまいます。 –

+1

@Brian:複数のホスト名を127.0.0.1に指定してもAFAIKに問題はありません。複数のホスト名を他のIPアドレスに指定している以上のことはありません。しかし、開発Webサーバーが名前ベースの仮想ホスティングを行うように設定する必要があることを意味します(すべての開発サイトが同じに見える場合を除く)。 –

+0

@BrianWhite多くのWeb開発者は、ホストを使用して複数のドメインをローカルホストに向ける。それ以外の場合は、複数のWebサイトで作業することはできません。 localhostで動作するように設定できるサイトは1つだけです。私がしているのは、.comを.localに変更することです。例。 www.thinkingmedia.caは私の開発マシンのwww.thinkingmedia.localになります。私は現在、50以上のローカルサイトを問題なく実行しています。申し訳ありませんが問題を抱えていましたが、問題に関する新しい質問を開始する場合。私は助けてうれしい。 – cgTag

関連する問題