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

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

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


当前回答

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R]

RewriteCond捕获www后HTTP_HOST变量中的所有内容。并将其保存在%1中。

RewriteRule捕获了没有/开头的URL,并将其保存在$1中。

其他回答

试试这个:

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

如果主机以www开头,我们将整个主机粘贴到URL的开头,然后去掉“www”。

使用。htaccess重定向到www或非www:

只需将以下代码行放入您的主根.htaccess文件中。 在这两种情况下,只需将domain.com更改为您自己的主机名。

重定向到www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^domain\.tld [NC]
  RewriteRule ^(.*)$ http://www.domain.tld/$1 [L,R=301]
</IfModule>

重定向到非www

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.domain\.tld [NC]
  RewriteRule ^(.*)$ http://domain.tld/$1 [L,R=301]
</IfModule>

添加如果localhost,忽略重定向(用于本地环境中的开发目的)。如果不是localhost AND(不是https或它是www),重定向到https和非www。

RewriteEngine On

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

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

我让它起作用的唯一方法…

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