如何强制我的网址始终以www开头?


17

我想确保用户www.mydomain.com即使通过别名到达也能进入mydomain.com。这样一来,我就可以控制子域上的Cookie,并让Google看到一个域,而不是URL的大杂烩。

如何使用apache做到这一点?


5
可能我建议您改为相反的做法,并强制执行mydomain.com吗?“ www”前缀是多余的,完全没有必要。
伊芙2009年

Cookie会发送到mydomain.com上的所有子域,而我可以自己决定使用www.mydomain.com从何处加载哪些Cookie。例如,我可以避免将cookie添加到static.mydomain.com中,这样就可以避免不会为加载的每个图像进行传输。绝对不是不必要的。
Magnar

您可以专门告诉Google使用单一链接样式。请参阅下面的答案。
罗宾尼克斯,2009年

我没有代表处,但加入这些标记将是有益的:重定向redirectmatch mod_alias中
汤姆

1
虽然这是后,它仍然是相关的。不建议使用www ,因为没有子域的域有几个缺点。有关使用www的几种原因,请参见yes-www.org/why-use-www
user50849 2014年

Answers:


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禁用了自动链接。)
Greg Hewgill 09年

1
真的吗 亲爱的,我从来不知道。我一直以为您必须使用RedirectMatch来保留URI的尾随部分
Dave Cheney

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文件有很多开销,并且在其中进行重写会使情况变得更糟。
约翰·道尔顿,

对于此任务,使用重定向始终优于使用mod_rewrite。
David Pashley 09年

3

如果您确实希望Google使用特定的域样式(带有或不带有www),然后创建一个免费的Google网站站长工具帐户,请验证该域的所有权(上传文件)并使用在线控制面板设置您的首选域

就这么简单,您不需要更改任何服务器端代码,带或不带www的入站链接都将被视为增加页面的PageRank。

链接可能同时使用URL的www版本和非www版本(例如http://www.example.comhttp://example.com)指向您的站点 。首选域是要在搜索结果中用于网站的版本 。

当您告诉我们您的首选域名后,我们会在显示网址时考虑您的偏好。您可能需要一些时间才能看到此更改完全反映在我们的索引中。

如果您指定首选域,则我们可能会将域的www和非www版本视为对单独页面的单独引用。


1

我遇到了相反的问题,当我只想直接从domain.com服务时,人们会去www.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>

正如Greg Hewgill提到的那样,使用Redirect比RedirectMatch稍微简单一些,并且可以完成相同的工作,有关更多详细信息,请参见http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirect

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.