Это лучшее место для использования перенаправления 301, чтобы контролировать, какое доменное имя используется? - PullRequest
2 голосов
/ 30 декабря 2011

Я использую ColdFusion 9.0.1

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

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>

ОБНОВЛЕНИЕ

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

<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

Ответы [ 3 ]

2 голосов
/ 31 декабря 2011

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

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

В ColdFusion 9 вместо этого вы должны использовать location()function:

location("url", addtoken, statusCode);

В вашем случае:

location(GoToURL, false, 301);

В вашей переменной GoToURL также отсутствует имя страницы, поэтому вам нужно добавить CGI.SCRIPT_NAME в микс простодо ?, чтобы получить полный URL-адрес для вызова.

С синтаксисом тега (как я полагаю, в ColdFusion 8) нет необходимости использовать тег CFHEADER для перенаправления 301.Тег CFLOCATION теперь поддерживает атрибут statuscode, который может быть установлен на 301 при необходимости.

1 голос
/ 01 января 2012

Предыдущий ответ показывает, как перенаправить domain.com на www.domain.com. Если вы хотите перенаправить www.domain.com на «domain.com», вам понадобится файл web.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 была для меня хорошим справочником.

1 голос
/ 30 декабря 2011

Если вы используете 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>

Проверьте эту ссылку для получения дополнительных параметров.

...