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


17

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

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


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]

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 как отдельные ссылки на отдельные страницы.


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 .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.