2011-12-30 1 views
2

私は私のようないくつかのドメインを介してアクセス可能な新しいサイト持っているのColdFusion 9.0.1これは301リダイレクトを使用してどのドメイン名を使用するかを制御するのに最適な場所ですか?

を使用しています:SEOおよびトラッキングのために

mydomain.com 
www.mydomain.com 
foo.mydomain.com 

を、私は確信して唯一の「MYDOMAINことにしたいです.com "は索引付けされ、アクセスされます。したがって、他のドメインを介して自分のサイトにアクセスしようとするすべてのリクエストは、「mydomain.com」宛の301になります。

クエリ文字列をキャプチャして保持して、ホームページに人を送信するだけではないことを確認します。

また、私はコードでリダイレクトのこの特定のタイプを行うための最善の場所です私は思ってい127.0.0.1

でローカルにサイトにアクセスできることを確認します。私の推測では、onRequestStart()メソッドの最上部付近のapplication.cfcにあります。

コードを入れるのに最適な場所ですが、このコードは完全ですか?これをコード化する良い方法はありますか?

<cfscript> 
ThisHost = CGI.HTTP_HOST; 
QString = CGI.QUERY_STRING; 
GoToURL = "http://mydomain.com?" & QString; 
if (ThisHost != "mydomain.com" && ThisHost != "127.0.0.1") { 
    writeOutput("<cfheader statuscode='301' statustext='Moved permanently'>"); 
    writeOutput("<cfheader name='location' value='#GoToURL#'>"); 
    abort; 
} 
</cfscript> 

UPDATE

私は、これは、このタスクは、Webサーバーのスキルセットに非常に適していますので、私は、必要なものを達成するための最良の方法ではありません知っています。私は、Webサーバー上でこれを実装することができますまで、ここに私のコードは次のとおりです。

<cfscript 
ThisHost = CGI.HTTP_HOST; 
QString = CGI.QUERY_STRING; 
GoToURL = "http://flyingpiston.com/?" & QString; 
if (ThisHost != "flyingpiston.com" && ThisHost != "127.0.0.1:8500") { 
    location(GoToURL, false, 301); 
} 
<cfscript 
+2

より良い解決策は、Webサーバーレベルでこれを行うことです。 – ale

+0

Al、それは.htaccessを使って行いますか? Hostek.comを使用して自分のサイトをホストしている場合はどうなりますか? IISホスティング会社で.htaccessを使用できますか? –

+0

私は昨日多くの読書をして、Hostekでhtaccessを使ってURLの書き換えを行うことができると判断しました。 –

答えて

2

私は、Webサーバーでこれを行うことがより良い解決策であるとの他のコメントと回答に同意します。私はまた、あなたがスクリプトの構文を使用したい場合は、これは完全に間違っていると、単にブラウザに文字列を返すことを指摘します:

writeOutput("<cfheader name='location' value='#GoToURL#'>"); 

のColdFusion 9では、あなたが代わりにlocation()機能を使用します。

あなたのケースでは
location("url", addtoken, statusCode); 

:あなたが追加する必要があると思いますので、

location(GoToURL, false, 301); 

あなたGoToURL変数も、ページ名が欠落しているCGI.SCRIPT_NAME?の直前のミックスに挿入して、完全なURLが呼び出されるようにします。

タグの構文(ColdFusion 8の考え方)では、CFHEADERタグを301リダイレクトに使用する必要はありません。 CFLOCATIONタグは、statuscode属性をサポートし、必要に応じて301に設定できます。

+0

はい、私は、Webサーバーの使用がより良い解決策であることに同意し、私はその方向に移行します。それまでは、実験してコードを修正し、あなたが提案したものを思いついた。私はそれを昨日実装し、それは素晴らしい作品です。ありがとう...そして幸せな新年!!! –

1

あなたはIIS 7.0上にある場合は、あなたができるのconfigureかもしれ正規のためのあなたのweb.configファイルはそうのようなリダイレクト:

<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Redirect to WWW" stopProcessing="true"> 
      <match url=".*" /> 
      <conditions> 
      <add input="{HTTP_HOST}" pattern="^domain.com$" /> 
      </conditions> 
      <action type="Redirect" url="http://www.domain.com/{R:0}" 
       redirectType="Permanent" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 

追加のオプションについてはlinkをご覧ください。

+0

これを私のWebサイトにドロップすることはできますか、それとも管理者がIISで行う必要がありますか? –

+0

通常のデフォルトのIISインストールでは、[URL書き換えモジュール](http://www.iis.net/download/urlrewrite)がインストールされていない可能性がありますが、多くのホスティングプロバイダがインストールしています。ローカルホストまたはVPSにモジュールをインストールする場合は、このリソースをお勧めします。http://www.iis.net/download/urlrewrite。 – Micah

+0

チップをありがとう。 –

1

前の回答は、domain.comをwww.domain.comにリダイレクトする方法を示しています。 www.domain.comを 'domain.com'にリダイレクトする場合は、ウェブが必要です。configファイルは、次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <location path="" overrideMode="Inherit"> 
     <system.webServer> 
      <rewrite> 
       <rules> 
        <rule name="remove www" patternSyntax="Wildcard" stopProcessing="true"> 
         <match url="*" /> 
         <conditions logicalGrouping="MatchAny"> 
          <add input="{HTTP_HOST}" pattern="www.*" /> 
          <add input="{HTTP_HOST}" pattern="foo.*" /> 
         </conditions> 
         <serverVariables /> 
         <action type="Redirect" url="http://{C:1}" /> 
        </rule> 
       </rules> 
      </rewrite> 
     </system.webServer> 
    </location> 
</configuration> 

上記のweb.configファイルは、IIS 7.5(Windows Server 2008 R2)で作成されました。 ホストがこれを動作させるためには、前述のURLリライトモジュールをインストールする必要があります。 web.configファイルは、サイトのルートフォルダに格納されています。 上記の例では、 'www'と 'foo'のサブドメインをドメインにリダイレクトします。

この10 URL Rewriting Tips and Tricksの記事は私にとって参考になっています。

関連する問題