我想使用 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 请求,从而完全避免这种重写。为什么必须使用重写才能获得此功能。
也许我错了,但这段代码看起来有问题。