mod_rewrite 从 SSL 重定向到 HTTP 不起作用

mod_rewrite 从 SSL 重定向到 HTTP 不起作用

我想使用 mod_rewrite 来确保某些页面通过 SSL 提供服务,而其他所有页面均能正常使用,但我无法让它正常工作

这是可行的(当请求 uri 是针对用户或购物车时重定向到 SSL)

RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} users [OR]
RewriteCond %{REQUEST_URI} cart
RewriteRule ^(.*)$ https://secure.host.tld/$1 [R,L]

因此,为了适应用户不继续使用 SSL 浏览网站,当请求其他 uri 时,我想到下面的方法,但不起作用:(当端口为 443 且请求 uri 不是需要由 ssl 提供服务的 uri 之一时,重定向回正常主机)

RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/users [OR]
RewriteCond %{REQUEST_URI} !group
RewriteRule ^/?(users|groups)(.*)$ http://host.tld/$1 [R,L]

有什么帮助吗?

谢谢

答案1

您的代码:

RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/users [OR]
RewriteCond %{REQUEST_URI} !group
RewriteRule ^/?(users|groups)(.*)$ http://host.tld/$1 [R,L]

如果是安全的,而不是用户或组...我认为您想要的是如果是安全的,而不是用户,而不是组。但是,然后您将仅将用户和组重写为 http:,这似乎与您想要的相反。

因此,你可以这样做:

RewriteCond %{SERVER_PORT} 443
RewriteCond %{REQUEST_URI} !^/(users|group)
RewriteRule ^(.*)$ http://host.tld/$1 [R,L]

由于您已在规则中删除了用户/组,因此您的重写规则永远不会看到它。

但是,不要使用 SERVER_PORT,请考虑:

RewriteCond %{HTTPS} off

RewriteCond %{HTTPS} on

为了使调试更容易一些,

RewriteLog /tmp/rewritelog
RewriteLogLevel 9

当您发出请求时查看该日志文件,您就可以更好地了解正在发生的事情。

答案2

这看起来并不是使用 SSL 的特别好的方法。可能有一种方法可以干扰 get 请求,从而完全避免这种重写。为什么必须使用重写才能获得此功能。

也许我错了,但这段代码看起来有问题。

SSL 剥离!http://www.youtube.com/watch?v=Dd5qGS-5C0I

相关内容