Https Apache2使用vHost将除部分页面外的所有页面重定向回http

Https Apache2使用vHost将除部分页面外的所有页面重定向回http,https,apache2,rewrite,Https,Apache2,Rewrite,我正在使用Apache2的重写规则,使用vHost将某些类型的页面重定向到HTTPS。这些都是以mydomain.com/users开头的内容。换句话说,所有与用户及其信息相关的页面都应该在HTTPS上。我想将所有其他页面重定向到HTTP 现在发生的情况是,当用户转到/users页面时,他会被很好地重定向到HTTPS。但是当他离开/users区域时,我无法将重定向返回到HTTP 我需要规则和条件将任何不是/users/*的内容重写为HTTP。换言之,请帮我填空: RewriteCond %{SE

我正在使用Apache2的重写规则,使用vHost将某些类型的页面重定向到HTTPS。这些都是以
mydomain.com/users
开头的内容。换句话说,所有与用户及其信息相关的页面都应该在HTTPS上。我想将所有其他页面重定向到HTTP

现在发生的情况是,当用户转到
/users
页面时,他会被很好地重定向到HTTPS。但是当他离开
/users
区域时,我无法将重定向返回到HTTP

我需要规则和条件将任何不是
/users/*
的内容重写为HTTP。换言之,请帮我填空:

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} __blank__
RewriteRule __blank__ http://mydomain.com%{REQUEST_URI} [R=301,L]
在研究这一点时,有几件事我试图避免。我需要在
/users
下添加一个通配符,因为我正在开发应用程序,并且经常在users下添加页面(这是一个Rails应用程序)

我明白,不匹配正则表达式并不容易。我在这里所要做的就是让大部分网站在HTTP上运行,除了HTTPS上的
/users/*
页面


此外,是的,我有一个有效的证书,是的,我已经验证了Apache2重写模式的工作。我可以让所有的URL重写到HTTP没有问题。如何不重写请求URI中以
/users
开头的内容?到目前为止,我想我已经尝试了这个网站上的每一个答案…

这类问题有很多答案,-你只需要搜索一下这个网站。是的,他们不会百分之百地直接回答你的问题(因为每个人都有稍微不同的要求——比如不同的页面名称等等),但整个方法是一样的

在任何情况下,都可以这样做:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# don't do anything for images/css/js (leave protocol as is)
RewriteRule \.(gif|jpe?g|png|css|js)$ - [NC,L]

# force https for /users/*
RewriteCond %{HTTPS} =off
RewriteRule ^/users/ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# force http for all other URLs
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/users/
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# your other rewrite rules below
  • 在任何其他重写规则(如果存在)之前,这些规则需要放在VirtualHost指令中如果放置在其他位置可能需要一些小的调整

  • 他们会的

    • /users/
      中的所有资源强制使用HTTPS
    • 对图像、css样式和JavaScript文件不做任何操作(确切地说,对于具有这些扩展名的文件)
    • 并将强制所有其他URL使用HTTP
  • 重要提示:这些规则很可能不会立即适用于您。这是因为现代浏览器确实缓存了您以前尝试的301重定向。因此,我建议在另一个浏览器上测试它,并在测试期间将301更改为302(302未缓存)。。或者清除所有浏览器缓存(甚至可能是历史记录)并重新启动浏览器