部分页面强制使用https,其他使用http

.htaccessApache 2.4.6 )文件中,我这样做:

 RewriteCond %{HTTPS} =off [NC] RewriteCond %{REQUEST_URI} ^\/(login|checkout)\/?(.*) [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

所以,如果我的用户进入http:// site / login,他会被redirect到https:// site / logincheckout页面相同。

但是,对于所有其他页面,我不希望允许访问https协议。 在这种情况下,我想强制301redirect到http协议。

例如:如果我的用户访问https:// site / products,我需要将其redirect到http:// site / products

所以,我添加了一个新的RewriteCond否定正则expression式,如下所示:

 RewriteCond %{HTTPS} =on [NC] RewriteCond %{REQUEST_URI} ^\/((?!login|checkout))\/?(.*) [NC] RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

但它没有工作。

任何想法这个问题? 韩国社交协会。

我的.htaccess文件

 Options +FollowSymLinks -MultiViews DirectoryIndex index.php RewriteEngine On # Force HTTP to HTTPS RewriteCond %{HTTPS} =off [NC] RewriteCond %{REQUEST_URI} ^/index.php/(login|checkout) [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] # Force HTTPS to HTTP RewriteCond %{HTTPS} =on [NC] RewriteCond %{REQUEST_URI} !^/index.php/(login|checkout) [NC] RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] # From /index.php/ to / RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php/?$ /$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] 

第一条规则,如果我的用户进入/index.php/login,他将被redirect到/login ,从URI中删除/index.php/

最后的规则委托所有调用index.php request dispatch (前端控制器)。

你的负面看法似乎并不正确。

你也可以用更简单的语法否定早期的URI匹配条件。 所以总体来说,这两条规则应该起作

 Options +FollowSymLinks -MultiViews DirectoryIndex index.php RewriteEngine On # Force HTTP to HTTPS RewriteCond %{HTTPS} =off [NC] RewriteCond %{THE_REQUEST} /(login|checkout) [NC] RewriteRule ^(login|checkout) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] # Force HTTPS to HTTP RewriteCond %{HTTPS} =on [NC] RewriteCond %{THE_REQUEST} !/(login|checkout) [NC] RewriteRule !^(login|checkout) http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] # From /index.php/ to / RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php/?$ /$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Delegate all requests to the index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ /index.php [L]