我们希望将所有HTTPSstream量redirect到HTTP,除了特定的URL是/ user / login
到目前为止我们已经得到:
RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^user/login(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
但是,当它redirect回HTTP时,会导致redirect循环
我相信这应该做的伎俩:
RewriteEngine On RewriteBase / # Turn SSL on for /user/login RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} ^/user/login RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] # Turn SSL off everything but /user/login RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} !^/user/login RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
以上将做到以下几点:
1. User types: https://yourdomain.com/user/login - no redirect 2. User types: http://yourdomain.com/user/login -> redirect to: https://yourdomain.com/user/login 3. User types: https://yourdomain.com/somerandomfile.php -> redirect to: http://yourdomain.com/somerandomfile.php 4. User types: http://yourdomain.com/somerandomfile.php - no redirect
像这样的东西应该工作:
RewriteEngine on RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} !^/user/login RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
但是这对我来说没有什么意义。 如果您只通过SSL将请求redirect到/ user / login,并保持原样,则会更好:
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule /user/login(.*) https://%{HTTP_HOST}/user/login$1 [R,L]
当URI与/ user / login /不匹配时,您正在寻找redirect 这是答案。