在.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://
site / login,他会被redirect到https://
site / login 。 checkout
页面相同。
但是,对于所有其他页面,我不希望允许访问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]
但它没有工作。
任何想法这个问题? 韩国社交协会。
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]