64

对于很多人来说,这似乎不是问题(阅读:我找不到答案),但我想更新以下 htaccess 代码,不仅可以从 URL 中删除“www”,还可以删除任何子访问的目录。

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

有了这个,http://www.example.com/any/可以很好地解析,但我希望它像根一样重定向到http://example.com/any/ 。

4

5 回答 5

160

我遇到了同样的问题(无法从指向附加域上的子目录的 URL 中删除“www”),但是经过一些试验和错误,这似乎对我有用:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]
于 2012-01-02T09:26:02.270 回答
29

非 www => www 和相反 www => 非 www 的重定向代码。.htaccess 文件中没有硬编码域和方案。因此源域和 http/https 版本将被保留。

APACHE 2.4 及更高版本

非万维网 => 万维网:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

万维网 => 非万维网:

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

注意:不能在 %{REQUEST_SCHEME} 不可用的 Apache 2.2 上工作。为了与 Apache 2.2 兼容,请使用以下代码或将 %{REQUEST_SCHEME} 替换为固定的 http/https。


APACHE 2.2 及更高版本

非万维网 => 万维网:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

...或更短的版本...

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

万维网 => 非万维网:

RewriteEngine On

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

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

... 无法使用更短的版本,因为 %N 仅在最后一个 RewriteCond 中可用 ...

于 2017-01-20T18:53:29.050 回答
13

我认为您很接近,但请尝试以下操作:

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

不确定您对子目录的确切含义,但这遵循您的示例。

于 2011-06-29T02:21:54.590 回答
0

我使用此代码。如果我的访问者的 url 中没有 www,那么这个条件会在 url 中添加 www,否则不需要在 url 中添加 www(因为他已经有了。:))

RewriteEngine On
RewriteCond %{HTTP_HOST}  !^www\.YOUR-SITE\.com$ [NC]
RewriteRule ^(.*) http://www.YOUR-SITE.com/$1 [L,R]
于 2017-04-08T22:34:26.297 回答
-4

您好,该代码运行良好,除了它在带有一些值和斜线的 URL 中传递 www,它在 URL 中显示参数和值。

RewriteEngine On SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/plain text/xml RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(!.(\.gif|\.jpg|\.png|\.swf|\.css|\.js|\.txt|\.php|\.htm|\.html)|.+[^/])$ /$1/ [R=301,NC] RewriteRule ^(.[^.*]+)\/$ ?jogar=$1 [NC] Options -Indexes Options +FollowSymLinks RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http:\/\/%1%{REQUEST_URI} [R=301,QSA,NC,L]

于 2014-03-29T21:49:51.280 回答