Лучшая практика для добавления / удаления www с адреса сайта - PullRequest
1 голос
/ 31 января 2012

если вы идете на:

http://www.stackoverflow.com вы будете перенаправлены на http://stackoverflow.com

http://facebook.com вы будете перенаправлены на http://www.facebook.com

проблема в том, что если пользователь аутентифицирует в:

http://www.example.com

и после перехода на http://example.com он не будет аутентифицирован (потому что домен другой, я думаю)

Я заметил, что stackoverflow и facebook перенаправляют на домен с / без www

кто-нибудь знает, как это делается?

Ответы [ 4 ]

3 голосов
/ 31 января 2012

Похоже, вы задаете два разных вопроса:

Вопрос 1: Как вы перенаправляете на каноническое доменное имя, то есть всегда добавляете "www" в www.example.com?
Ответ: Это зависит от сервера, который вы используете, но на размещенном на IIS сайте (например, .NET) вы бы изменили правила перезаписи web.config сайта.На веб-сайте Apache (например, PHP) вы должны изменить файл .htaccess.Особенности того, как вы пишете эти правила, уже были изложены в других ответах, поэтому я не стану их публиковать.

Вопрос 2: Как вы гарантируете, что пользователь, прошедший аутентификацию для«www.example.com» также аутентифицируется для «example.com»?
Ответ: Большинство токенов аутентификации хранятся в cookie.Если домен этого файла cookie имеет значение «www.example.com», он будет аутентифицироваться только для «www.example.com».Ключ должен установить домен cookie в «.example.com».Обратите внимание на точку перед «примером», но отсутствие префикса «www».Это позволяет cookie пересекать все дочерние домены «example.com», поэтому он также будет работать для «subdomain1.example.com» и т. Д.

EDIT: Я только что понял, что нетЭто пример .net перенаправления на канонический хост с перезаписью URL, так что вот один.Следующее будет вложено в элемент system.webServer вашего файла web.config в корневом каталоге вашего веб-сайта:

     <rewrite>
        <rules>
            <rule name="CanonicalHostName">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^example\.com$" />
                </conditions>
                <action type="Redirect" url="http://www.example.com/{R:1}" />
            </rule>
        </rules>
     </rewrite>


EDIT2: По адресуКомментарий Чака ниже:
Если у вас есть субдомены, с которыми вы не хотите делиться аутентификацией, то заставьте своих посетителей (www.) Example.com либо всегда использовать www, либо всегда быть без www сПравило перезаписи .htaccess, как правило Swadq / Vyktor (если вы используете Linux), или правило перезаписи web.config, как у меня (если вы используете Windows).Таким образом, у пользователей даже не будет возможности пройти аутентификацию для домена, с которого они перенаправляются.Задайте для своего домена cookie аутентификации www.example.com, если вы используете www, или просто example.com, если вы не используете www.
Это будет работать даже с поддоменами, с которыми вы не хотите делиться аутентификацией.

2 голосов
/ 31 января 2012

Измените .htaccess, чтобы добавить перенаправление на выбранный вами поддомен. Все файлы cookie должны быть установлены из этого домена, фактически невозможно использовать другой домен.

Здесь:

Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]`

Это всегда будет перенаправлять на www. Правило должно быть изменено для перенаправления на основной домен.

В качестве альтернативы вы можете использовать PHP для перенаправления 301 (Permanent) перед отправкой заголовков (путем вывода html).

<?PHP
Header( "HTTP/1.1 301 Moved Permanently" ); 
Header( "Location: http://www.domain.com" ); 
?> 

Если вы хотите использовать Asp.net, так как вы отметили пост, добавьте его на свою индексную страницу:

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
    Response.Status = "301 Moved Permanently";
    Response.AddHeader("Location","http://www.domain.com");
}
</script> 
0 голосов
/ 31 января 2012

Точный метод зависит от того, используете ли вы IIS, Apache или что-то еще. Но если вы используете IIS (что, как я полагаю, с тех пор, как вы отметили вопрос asp.net), вы можете взять код mod_rewrite, предложенный Vyktor, и использовать правила импорта mod_rewrite в IIS Manager, чтобы преобразовать их в нечто, совместимое с IIS.

0 голосов
/ 31 января 2012

Возможно, с использованием mod_rewrite, см. Пример (результат первого гоголя после: apache redirect):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=permanent,L] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...