.htaccess强制SSL(HTTPS)除了少数之外的所有页面

时间:2016-09-03 12:51:44

标签: .htaccess https

好的,所以除了在一个特定的页面上,我需要通过HTTPS转发所有流量。这是我当前的.htaccess代码:

RewriteEngine On 

RewriteCond %{SERVER_PORT} 80 

RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

ErrorDocument 404 /404.html

Options -Indexes

所以基本上我需要通过HTTPS BESIDES /r.php& /l.php& /c.php页面,可以这样做吗?我尝试过一些研究,但发现太多了。

编辑: 这会有用吗?

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/r.php$
RewriteCond %{REQUEST_URI} !^/c.php$
RewriteCond %{REQUEST_URI} !^/l.php$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2 个答案:

答案 0 :(得分:1)

您可以在RewriteCond告诉apache之上添加一个新的RewriteRule来按原样处理它而不再应用RewriteRules(L说,匹配此规则后停止,(r|c|l)是用于匹配r OR c OR l)的正则表达式。

RewriteRule ^/?(r|c|l)\.php$ - [L]

有关详细信息,请参阅https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

答案 1 :(得分:1)

  

如果您可以使用安全连接,我们强烈建议

RewriteEngine On
RewriteCond %{HTTPS} off
#Add slash(es) before special characters to escape them as literals
RewriteCond %{REQUEST_URI} !^\/r\.php$ 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

这样做是检查您的HTTPS标志是否已在服务器上设置,如果设置且页面不是/r.php 则重定向安全HTTPS等效的页面。

  

编辑:/r.php实体需要通过使用反斜杠/这些字符来转义.\

RewriteCond行从安全连接标志检查中“转义”/r.php页面引用,最好使用此处详述的正确服务器标志,而不是手动端口请求,因为安全/不安全标准的超文本协议端口可以是服务器上的 ANY 端口,并且TLS / HTTP端口为443/80等只是常规(而且根本不需要)。