Как я могу обеспечить, чтобы мои URL всегда начинались с www?

17

Я хочу убедиться, что пользователи приходят, www.mydomain.comдаже если они приходят через псевдоним mydomain.com. Это сделано для того, чтобы я мог контролировать файлы cookie на поддоменах и чтобы Google видел один домен, а не мешалку URL-адресов.

Как я могу сделать это с Apache?

Magnar
источник
5
Могу ли я предложить вам вместо этого обратить вспять, и вместо этого применить mydomain.com? Префикс «www» является избыточным и совершенно ненужным.
Eevee
Файлы cookie отправляются во все субдомены на mydomain.com, и я сам могу решить, какие файлы cookie будут загружаться с сайта www.mydomain.com. Например, я могу избежать добавления файлов cookie на static.mydomain.com, чтобы файлы cookie не не передается для каждого загруженного изображения. Это определенно не является ненужным.
Магнар
Вы можете указать Google использовать единый стиль ссылок. Смотрите мой ответ ниже.
Robinicks
У меня нет представителя, но было бы полезно добавить эти теги: redirect redirectmatch redirect
Tom
1
Хотя это намного позже, это все еще актуально. www не считается устаревшим, поскольку домен без поддоменов имеет несколько недостатков. Смотрите yes-www.org/why-use-www по нескольким причинам использования www.
user50849

Ответы:

17
<VirtualHost ip:80>
   ServerName domain.com
   RedirectMatch permanent ^(.*)$ http://www.domain.com$1
</VirtualHost>

<VirtualHost ip:80>
   ServerName www.domain.com

   ... usual config
</VirtualHost>
Дейв Чейни
источник
7
Для более простого решения вы можете: «Перенаправить перманент / ptth: //www.domain.com/», и apache автоматически сохранит суффикс. (Я перевернул http, чтобы отключить автолинк.)
Грег Хьюгилл,
1
В самом деле ? Сладкий, я никогда этого не знал. Я всегда думал, что вы должны использовать RedirectMatch для сохранения завершающих частей URI
Дейв Чейни
4

Добавьте это в ваш httpd.confфайл:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
Magnar
источник
4

Включите поддержку mod_rewrite, затем создайте файл .htaccess в корневой папке для своего домена со следующим содержимым:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} ^domain\.com$
   RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>
Ричард Слейтер
источник
не забудьте сделать тест RewriteCond нечувствительным к регистру ...
Alnitak
Делайте это только в том случае, если у вас нет доступа для внесения изменений в конфигурационный файл apache по какой-либо причине. .htaccessфайлы имеют много накладных расходов, и перезаписи внутри них делают его намного хуже.
Джон Далтон
использование Redirect всегда предпочтительнее, чем использование mod_rewrite для этой задачи.
Дэвид Пашли
3

Если вы действительно хотите, чтобы Google использовал определенный стиль домена (с или без www ), создайте бесплатную учетную запись Google Webmaster Tools , подтвердите право собственности на свой домен (загрузите файл) и установите предпочитаемый домен с помощью онлайн-панели управления.

Это так просто, и вам не нужно изменять какой-либо серверный код, также входящие ссылки с или без www будут обрабатываться одинаково, увеличивая PageRank ваших страниц.

Ссылки могут указывать на ваш сайт, используя как URL-адреса, так и не-www версии (например, http://www.example.com и http://example.com ). Предпочтительным доменом является версия, которую вы хотите использовать для своего сайта в результатах поиска .

Как только вы сообщите нам предпочитаемое доменное имя, мы учтем ваши предпочтения при отображении URL-адресов. Может пройти некоторое время, прежде чем вы увидите, что это изменение полностью отражено в нашем индексе.

Если вы не укажете предпочитаемый домен, мы можем рассматривать версии домена с www и без www как отдельные ссылки на отдельные страницы.

Robinicks
источник
1

У меня была противоположная проблема, люди заходили на www.domain.com, когда я просто хотел обслуживать прямо с domain.com:

<VirtualHost *:80>
   ServerName domain.com

   ... usual config
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain.com
   ServerAlias sub.domain.com # can also catch some other subdomains
   ServerAlias *.domain.com # or all previously unmatched domains

   Redirect permanent / http://domain.com/
</VirtualHost>

Как упоминал Грег Хьюгилл, использование Redirect немного проще, чем RedirectMatch, и выполняет ту же работу, для получения дополнительной информации см. Http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirect .

Том
источник