需要将所有流量重定向到https

Bra*_*rad 30 .htaccess redirect

我想将任何流向http://example.com的流量重定向到https://example.com

同样适用于http://example.com/abouthttps://example.com/about

我以为会是这样的:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

Bor*_*lid 70

这对我有用:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

如果流量通过非SSL HTTP传入,则重定向到与用户最初尝试访问的任何页面等效的HTTP.它也不涉及任何mod_rewrite选项,因此它易于阅读.

旁听:为什么每个人都觉得需要明确设置重定向的HTTP代码并将其中一个重写标记为"最后一个"?说真的,我在过去的几天里看到了几十个相同的htaccess规则.

  • 我认为如果重写是"纠正"动作,301响应可能比默认的302响应更合适,并且它需要明确声明.就"L"而言,如果你没有任何进一步的规则匹配是没有必要的,但如果你这样做,可以通过擦除新的方案/主机信息轻松地阻止重定向.考虑到大多数人"忘记"在一半的时间内发布剩余的规则集,这是更安全的选择.如果没有更多的规则,我同意它只是混乱,当他们在文件中的唯一规则上使用它时我真的不明白... (3认同)
  • 虽然这似乎有效,但这是错误的:因为这依赖于客户端发送的“主机”标头。此外,主机头还可以包含端口:因此,如果客户端请求中的主机头包含端口:80,则位置将具有端口:80,带有 https,这是错误的。请参阅 http://serverfault.com/questions/814153/apache-returning-wrong-location-header。来自 t-richards http://stackoverflow.com/a/27930928/1504300 的答案似乎更好 (2认同)

eis*_*eis 12

这是使用.httaccess先前答案,但添加了评论中提出的更改,以及一些来自我:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://my.domain.name%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 这适用于用户无权访问主配置但可以访问.htaccess规则的情况.如果您有权访问主配置,请改用mod_alias解决方案.
  • 对我来说,如果没有定义RewriteBase,就不会选择规则.明确定义它可以消除一些服务器设置的模糊性.
  • 至少在某些配置中,使用http时%{HTTPS}未设置off为null,但为null,因此!on规则更可靠off.
  • 对于显式主机名,您不依赖于客户端主机头或服务器配置.但是,显式主机名自然假设只有一个域可以重定向.主机头存在一些相当大的问题,例如包含端口和客户端提供的数据.Apache Wiki建议的另一种替代方法是使用%{SERVER_NAME}.如果您考虑使用它,请查看此讨论中的警告- 它依赖于其他配置是否正确.
  • R=301意味着它是永久重定向,因为它通常意味着在这种情况下.如果您认为它是临时的,那么可以省略或指定为R=302.
  • L表示它是应用此请求的最后一条规则.如果您怀疑或知道此后还有其他规则您不想申请,请保留.如果这是文件的唯一规则,则可以删除.


小智 7

根据Apache文档,使用mod_aliasmod_rewrite此任务更合适.也就是说,为了将所有HTTP流量重定向到HTTPS,可以:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost >

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost >
Run Code Online (Sandbox Code Playgroud)

有关此配置的两点注意事项:

  1. 您需要访问主服务器配置文件才能使此配置生效.该VirtualHost指令仅在"服务器配置"上下文中有效.
  2. 请记住,mod_rewrite指令在mod_alias指令之前处理.如果您的文件中已经有大量的RewriteRules .htaccess,那么mod_rewrite配置可能会更好.