2011-12-30 1 views
2

Я использую ColdFusion 9.0.1Это лучшее место, где можно использовать перенаправление 301 для управления тем, какое доменное имя используется?

У меня есть новый сайт, который доступен через несколько областей, таких как:

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

Для SEO и отслеживания целей, я хочу, чтобы убедиться, что только «MYDOMAIN .com "индексируется и получает доступ. Таким образом, каждый запрос, который пытается получить доступ к моему сайту через другие домены, будет 301 направлен на «mydomain.com».

Я хочу, чтобы я захватил и сохранил строку запроса, чтобы я не просто отправлял людей на домашнюю страницу.

Я также убедиться, что я могу получить доступ к сайту локально на 127.0.0.1

Я интересно, где в коде это лучшее место, чтобы сделать этот конкретный тип перенаправления. Я предполагаю, что он находится в application.cfc в верхней части, в методе onRequestStart().

Является ли это лучшим местом для размещения кода и делает ли этот код в полном объеме? Есть ли лучший способ кодировать это?

<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

Я знаю, что это не самый лучший способ сделать то, что мне нужно, потому что эта задача намного лучше подходит для набора навыков веб-сервера. Вот мой код, пока я не могу это реализовать на веб-сервере:

<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

Лучшим решением было бы сделать это на уровне веб-сервера. – ale

+0

Al, мог бы я сделать это с помощью .htaccess? Что делать, если я использую Hostek.com для размещения моего сайта? Могу ли я использовать .htaccess с хостинговыми компаниями IIS? –

+0

Вчера я много читал и решил, что могу переписывать URL-адреса с помощью htaccess с помощью Hostek. –

ответ

2

Я согласен с другими комментариями и ответами, которые делают это на веб-сервере - лучшее решение. Я хотел бы также отметить, что если вы хотите использовать синтаксис сценария, это совершенно не так и просто возвращает строку в браузер:

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

Да, я согласен, что использование веб-сервера - лучшее решение, и я буду двигаться в этом направлении. До тех пор я экспериментировал и модифицировал свой код и придумал именно то, что вы предложили. Я реализовал его вчера, и он отлично работает. Спасибо ... и с новым годом !!! –

1

Если вы на IIS 7.0 вы можете быть в состоянии настроить файл 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

Могу ли я удалить это на свой веб-сайт или это нужно сделать в IIS администратором? –

+0

Типичная установка IIS по умолчанию может не иметь установленного [URL Rewrite Module] (http://www.iis.net/download/urlrewrite), но многие хостинг-провайдеры делают или будут устанавливать его для вас. Если вы хотите установить модуль на свой localhost или VPS, я бы рекомендовал этот ресурс: http://www.iis.net/download/urlrewrite. – Micah

+0

Спасибо за подсказку. –

1

В предыдущем ответе показано, как перенаправить domain.com на www.domain.com. Если вы хотите перенаправить www.domain.com на «domain.com», вам понадобится сеть.конфигурационный файл, который выглядит следующим образом:

<?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 была хорошей ссылкой для меня.