apache重写 - 删除www并保留路径

时间:2013-08-16 11:50:42

标签: apache .htaccess rewrite

我的网站有两个网址:

http://sub.domain.com/

http://www.sub.domain.com/

我想统一网址,只使用没有www的版本。 但Google也链接到带有www的版本,这些版本链接到特定文章(路径的URL)。例如:

http://www.sub.domain.com/folder/some.html

我想重定向访问者,以便从地址中删除www前缀并保留文章路径。使用上面的示例将URL重写为:

http://sub.domain.com/folder/some.html

让我们澄清一下:

我想:

http://www.sub.domain.com -> http://sub.domain.com

http://www.sub.domain.com/folder/some.html -> http://sub.domain.com/folder/some.html

申请规则后:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

我明白了:

http://www.sub.domain.com -> http://sub.domain.com

^^它工作正常:))

http://www.sub.domain.com/folder/some.html -> http://sub.domain.com

^^它错误地工作:(

我当前的其他htaccess规则:http://pastebin.com/C74u7MGL

2 个答案:

答案 0 :(得分:0)

将此添加到您的网络根.htaccess目录

中的/
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

答案 1 :(得分:0)

我一般建议使用REQUEST_URI而不是常见的^(。*)$和$ 1:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^ http://sub.domain.com%{REQUEST_URI} [R=301,L]

优点:

  • REQUEST_URI正确保留缺少尾部斜杠的路径($ 1不会这样做)。因此olddomain.com/path将完全重定向到newdomain/path。仅使用1美元olddomain.com/path/将重定向到newdomain/path/,但会删除缺少尾部斜杠的路径段。
  • REQUEST_URI正确保留了任何查询字符串,这需要额外的QSA标记和$ 1解决方案。