我想使用mod_rewrite来确保某些页面通常以SSL和其他方式提供,但是我无法正常工作
这工作(请求uri是用户或购物车时redirect到SSL)
RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} users [OR] RewriteCond %{REQUEST_URI} cart RewriteRule ^(.*)$ https://secure.host.tld/$1 [R,L]
所以,为了适应用户不要用ssl来浏览网站,当请求其他uris时,我想下面,但是不起作用:(当端口是443并且请求uri不是需要服务的uris之一通过SSL,redirect回正常的主机)
RewriteCond %{SERVER_PORT} 443 RewriteCond %{REQUEST_URI} !^/users [OR] RewriteCond %{REQUEST_URI} !group RewriteRule ^/?(users|groups)(.*)$ http://host.tld/$1 [R,L]
任何帮助?
谢谢
你的代码:
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
为了使debugging更容易一些,
RewriteLog /tmp/rewritelog RewriteLogLevel 9
并在提出请求时观看该日志文件,您可以更好地了解发生的情况。
这看起来不像使用SSL的特别好方法。 可能有一种方法搞乱获取请求,以避免完全重写。 为什么你必须使用重写来获得这个function。
也许我错了,但这段代码看起来有问题。