我已经阅读了很多关于此的内容,但我仍然无法解决这个问题。我试图强制所有http请求转到https,除了2页。这2页请求具有传递给它们的参数。这是我目前使用的代码:
# Force go to https if user isn't asking for a url that has 'register_user.php' or 'register-customer' inside the url:
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/register_user.php$ [OR]
RewriteCond %{REQUEST_URI} !^/register-customer$ [NC]
RewriteRule ^(.*)$ https://www.myWebsite.com/main-folder/$1 [R,L]
# Force go to http if user is asking for a url that has 'register_user.php' or 'register-customer' inside the url:
RewriteCond %{SERVER_PORT} !80
RewriteCond %{REQUEST_URI} ^/register_user.php$ [OR]
RewriteCond %{REQUEST_URI} !^/register-customer$ [NC]
RewriteRule ^(.*)$ http://www.myWebsite.com/main-folder/$1 [R,L]
此代码不能完成所需的工作。这有什么问题吗?
答案 0 :(得分:0)
您应该使用THE_REQUEST
代替REQUEST_URI
,因为REQUEST_URI
可能会因其他规则而发生变化。
此外,您应该在其他规则之前将这两条规则放在首位:
# Force go to https if user isn't asking for a url that has 'register_user.php' or 'register-customer' inside the url:
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !/(register-customer|register_user\.php)[?/\s] [NC]
RewriteRule ^ https://%{HTTP_HOST}/main-folder%{REQUEST_URI} [R=301,NE,L]
# Force go to http if user is asking for a url that has 'register_user.php' or 'register-customer' inside the url:
RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} /(register-customer|register_user\.php)[?/\s] [NC]
RewriteRule ^ http://%{HTTP_HOST}/main-folder%{REQUEST_URI} [R=301,NE,L]
确保在测试此更改之前清除浏览器缓存。