1

我有一个在两个 URL 中运行的网站:

http://sub.domain.com/

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

我想统一 URL,只使用不带 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

4

2 回答 2

1

我一般建议使用 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完美。仅使用 $1olddomain.com/path/将重定向到,newdomain/path/但将删除缺少尾部斜杠的路径段。
  • REQUEST_URI 正确保留了任何查询字符串,这需要使用 $1 解决方案附加一个 QSA 标志。
于 2016-04-13T13:46:57.503 回答
0

将此添加到您.htaccess的 Web 根/目录中

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.sub\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]
于 2013-08-16T11:54:15.187 回答