我有一个旧网址(www1.test.net
),我想将其重定向到https://www1.test.net
我已经在我的网站上实施并安装了我们的SSL证书
这是我的旧文件.htaccess
:
RewriteEngine On
RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]
如何配置我的.htaccess
文件,以便网址自动重定向到https
?
谢谢!
答案 0 :(得分:113)
我使用以下命令成功将我的域的所有页面从http重定向到https:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
请注意,这将使用301 'permanently moved'
重定向重定向,这将有助于转移您的搜索引擎优化排名。
使用302 'temporarily moved'
更改[R=302,L]
答案 1 :(得分:93)
2016年更新
由于这个答案得到了一些关注,我想提示一个更推荐的使用虚拟主机的方法:Apache: Redirect SSL
<VirtualHost *:80>
ServerName mysite.example.com
Redirect permanent / https://mysite.example.com/
</VirtualHost>
<VirtualHost _default_:443>
ServerName mysite.example.com
DocumentRoot /usr/local/apache2/htdocs
SSLEngine On
# etc...
</VirtualHost>
旧答案,hacky事 鉴于您的ssl-port未设置为80,这将起作用:
RewriteEngine on
# force ssl
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
请注意,这应该是您的第一个重写规则。
修改:此代码执行以下操作。 RewriteCond(ition)检查请求的ServerPort是否为80(这是默认的http端口,如果指定了另一个端口,则必须调整条件)。如果是,我们会匹配整个网址(.*)
并将其重定向到https-url。 %{SERVER_NAME}
可以替换为特定的URL,但这样您就不必更改其他项目的代码。 %{REQUEST_URI}
是TLD(顶级域名)之后的网址部分,因此您将被重定向到您来自的位置,但是会被重定向到https。
答案 2 :(得分:38)
这对于www和https,代理用户而非代理用户来说是最好的。
RewriteEngine On
### WWW & HTTPS
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
### WWW & HTTPS
答案 3 :(得分:6)
我使用以下代码强制使用https:
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
答案 4 :(得分:4)
如果HTTPS / SSL连接在负载均衡器处结束且所有流量都发送到端口80上的实例,则以下规则可用于重定向非安全流量。
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
确保已加载mod_rewrite
模块。
答案 5 :(得分:4)
搜索重定向的最佳方式,我发现了这个(来自html5boilerplate):
# ----------------------------------------------------------------------
# | HTTP Strict Transport Security (HSTS) |
# ----------------------------------------------------------------------
# Force client-side SSL redirection.
#
# If a user types `example.com` in their browser, even if the server
# redirects them to the secure version of the website, that still leaves
# a window of opportunity (the initial HTTP connection) for an attacker
# to downgrade or redirect the request.
#
# The following header ensures that browser will ONLY connect to your
# server via HTTPS, regardless of what the users type in the browser's
# address bar.
#
# (!) Remove the `includeSubDomains` optional directive if the website's
# subdomains are not using HTTPS.
#
# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
# https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1
# http://blogs.msdn.com/b/ieinternals/archive/2014/08/18/hsts-strict-transport-security-attacks-mitigations-deployment-https.aspx
Header set Strict-Transport-Security "max-age=16070400; includeSubDomains"
也许它会帮助2017年的某个人! :)
答案 6 :(得分:2)
将此代码插入.htaccess文件中。它应该可以工作
RewriteCond %{HTTP_HOST} yourDomainName\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourDomainName.com/$1 [R,L]
答案 7 :(得分:1)
我也遇到了重定向问题。我尝试了Stackoverflow上提出的所有内容。我自己发现的一个案例是:
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
...
public virtual Group Group { get; set; }
...
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false) { }
...
public DbSet<Post> Posts { get; set; }
public DbSet<Group> Groups { get; set; }
...
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
public class ApplicationRole : IdentityRole
{
public ApplicationRole() : base() { }
public ApplicationRole(string name) : base(name) { }
public string Description { get; set; }
}
答案 8 :(得分:1)
这可确保重定向对不透明代理的所有组合有效。
这包括案例客户端
# behind proxy
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^http$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
# plain
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^$
RewriteCond %{REQUEST_SCHEME} ^http$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
答案 9 :(得分:0)
在.htaccess文件的末尾添加此代码
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
答案 10 :(得分:0)
在.htaccess的顶部添加以下内容
RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
答案 11 :(得分:0)
使用以下代码,或者您可以阅读有关此主题的更多详细信息。 How to redirect HTTP to HTTPS Using .htaccess?
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答案 12 :(得分:0)
这就是最终为我工作的原因
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
答案 13 :(得分:-1)
使用.htaccess
文件强制HTTPS
==>重定向所有Web流量:-
要强制所有网络流量使用HTTPS,请将以下代码行插入网站根文件夹的.htaccess
文件中。
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
==>仅重定向指定的域:-
要强制特定域使用HTTPS,请在网站的根文件夹的.htaccess
文件中使用以下代码行:
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
如果这不起作用,请尝试删除前两行。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
请确保将example.com替换为您尝试使用的域名 强制使用https。此外,您需要将www.example.com替换为 您的实际域名。
==>重定向指定的文件夹:-
如果要在特定文件夹上强制使用SSL,请将下面的代码插入到该特定文件夹中的.htaccess
文件中:
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://www.example.com/folder/$1 [R=301,L]
确保将文件夹引用更改为实际的文件夹名称。 然后,请确保将www.example.com/folder替换为您的实际域名 您要强制启用SSL的名称和文件夹。
答案 14 :(得分:-1)
用domainname.com
替换您的域,它正在与我合作。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domainname\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domainname.com/$1 [R,L]