在.htaccess
(Apache的2.4.6)文件,我这样做:
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^\/(login|checkout)\/?(.*) [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
所以,如果我的用户在获得http://
网站/登录 ,他将被重定向到https://
的网站/登录 。 同为checkout
页面。
但是,对于所有其他网页,我不想让访问https
协议。 在这种情况下,我想迫使301重定向到http
协议。
例如:如果我的用户访问https://
的网站/产品 ,我需要它重定向他http://
网站/产品 。
所以,我增加了一个新RewriteCond
否定的正则表达式,如下所示:
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
,去除/index.php/
从URI。
最后一个规则代表呼吁所有到index.php的request dispatch
(前端控制器)。