我想将www.example.com重定向到example.com。下面的htaccess代码可以做到这一点:

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

但是,有没有一种方法可以在不硬编码域名的通用方式做到这一点呢?


当前回答

以下是将一个www URL重定向到no-www的规则:

#########################
# redirect www to no-www
#########################

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

以下是将一个no-www URL重定向到www的规则:

#########################
# redirect no-www to www
#########################

RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]

注意,我使用了NE标志来防止apache转义查询字符串。如果没有这个标志,apache将把请求的URL http://www.example.com/?foo%20bar更改为http://www.example.com/?foo%2250bar

其他回答

RewriteEngine on
# if host value starts with "www."
RewriteCond %{HTTP_HOST} ^www\.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]

如果你想同时删除http和https上的www,请使用以下方法:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]

这种重定向 非ssl

http://www.example.com

to

http://example.com

和 SSL

https://www.example.com

to

https://example.com

在apache 2.4上。*你可以使用一个带有if指令的重定向,

<if "%{HTTP_HOST} =='www.example.com'">
Redirect / http://example.com/
</if>

但是如果我们需要为单独的http和https这样做:

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

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

对于那些需要能够访问整个网站没有'www'前缀。

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

请务必将此添加到下面的文件中

/site/location/.htaccess 

如果你想在httpd.conf文件中这样做,你可以在没有mod_rewrite的情况下这样做(显然这样对性能更好)。

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>

我在这里得到了答案:https://serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

和迈克尔的一样,除了这个有用:P