Answers:
将您的配置更改为此(添加斜线):
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
或者下面概述的解决方案(由@absiddiqueLive提出)将适用于任何域:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
如果需要支持http和https并保留协议选择,请尝试以下操作:
RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]
在其中替换login
为checkout.php
或需要支持HTTPS的任何URL。
我认为这是个坏主意。对于推理,请阅读此答案。
blog.example.com
成为www.blog.example.com
这是支持https和http的正确解决方案:
# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
www
像其他通用解决方案那样将子域重定向。
yoursite.co.uk
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
对于Https
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]
^(.*)$
代替(.*)
呢?
以下示例在ssl和non-ssl上均适用,并且由于您仅使用一条规则来管理http和https,因此速度更快
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]
[已测试]
这将重定向
http
至
https
至
试试这个,我在很多网站上都用过,效果很好
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1 [QSA,L,R=301]
我已经测试了上述所有解决方案,但对我不起作用,我尝试删除http://,并且也不会重定向,也很好地删除了www重定向,所以我很困惑,特别是我在https下运行所有网站://
因此,我将一些代码组合在一起,并为http://和https://以及www和非www提供了完美的解决方案。
# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
希望这可以帮助某人:)
在.htaccess文件中添加以下代码。
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
URL重定向教程可以在这里找到- 使用.htaccess文件将非www重定向到www并将HTTP重定向到HTTPS
此配置在具有SSL配置的bitnami wordpress中为我工作:
在文件/opt/bitnami/apps/wordpress/conf/httpd-app.conf中的“ RewriteEngine On”下添加了以下内容
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/$1 [L,R=301]
这将重定向未以WWW开头的域。它不会重定向所有子域。
它是有益的。
我认为,最佳答案可以成功地将非www重定向到www(例如:mysite.com-> www.mysite.com),但不考虑通配符子域,从而导致:
random.mysite.com -> www.random.mysite.com
这是带有/不带有HTTPS的解决方案
HTTP
RewriteEngine On
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ http%{ENV:protossl}://www.mysite.com/$1 [L,R=301]
HTTP / HTTPS
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/$1 [L,R=301]
*注:我尚未测试https,因为我目前没有要测试的证书,但是如果有人可以验证或优化我所拥有的证书,那真是太棒了。
如果可能,将其添加到主Apache配置文件中。它是一种重量更轻的解决方案,所需的处理更少。
<VirtualHost 64.65.66.67>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
ServerAdmin me@example.com
ServerName www.example.com
DocumentRoot /var/www/example
.
.
. etc
因此,VirtualHost
“ example.com” 的单独名称将捕获这些请求,然后将其永久重定向到您的main VirtualHost
。因此,没有针对每个请求的REGEX解析,并且您的客户端浏览器将缓存重定向,因此它们再也不会(或很少)再次请求“错误的” URL,从而节省了服务器负载。
请注意,中的斜杠Redirect permanent / http://www.example.com/
。如果没有它,则从example.com/asdf
重定向将重定向到http://www.example.comasdf
而不是http://www.example.com/asdf
。
避免使用301,而应使用现代的303或307响应状态代码。
请仔细考虑您是否确实需要指示的永久重定向,[R=301]
因为如果您决定稍后进行更改,则页面的先前访问者将继续看到原始重定向的页面。
永久重定向信息经常存储在浏览器的缓存中,通常很难消除(重新加载页面不能解决问题)。您的网站访问者将永远停留在以前的重定向中。
HTTP协议(v1.1)的新版本添加了两个新的响应状态代码,可以代替302使用。
303
URL重定向,但要求将请求类型更改为GET。307
URL重定向,但要求保留最初发送的请求类型。您仍然可以使用该代码302
(非永久重定向),尽管它被认为是模棱两可的。无论如何,大多数浏览器都302
以新303
代码指示的相同方式实现。
http://example.com/testing
到http://www.example.com/testing
。从长远来看,这可能是一个坏方法吗?谢谢,
用.htaccess编写:)
## Redirect from non-www to www (remove the two lines below to enable)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]