【问题标题】:Redirecting one url to https and all other urls to http将一个 url 重定向到 https 并将所有其他 url 重定向到 http
【发布时间】:2017-08-22 14:15:27
【问题描述】:

我正在尝试将一个 url 重定向到 https 并将所有其他 url 重定向到 http 例如:如果我想访问 example.com 的登录页面,它应该重定向到 https://example.com/login 如果我想访问登录以外的任何页面,它们应该被重定向到http://example.com/any-other-page。 当前的 .htaccess 代码:

RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteRule !^(login) http://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
DirectoryIndex index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

这工作正常。登录以外的所有 url 都重定向到 http。 但是如果我添加以下代码来重定向登录页面,它会被重定向到 index.php

RewriteCond %{HTTPS} !=on
RewriteRule (login) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]

我想要的只是登录页面应该重定向到 https。但这并没有发生。

提前致谢。

【问题讨论】:

    标签: apache .htaccess url-redirection


    【解决方案1】:

    您可以在.htaccess 文件中使用以下规则:

    RewriteEngine On
    
    RewriteCond %{HTTP:X-Forwarded-SSL} !on
    RewriteCond %{REQUEST_URI} ^\/(login)
    RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]
    
    RewriteCond %{HTTP:X-Forwarded-SSL} =on
    RewriteCond %{REQUEST_URI} !^\/(login)
    RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301]
    

    第一组规则检查是对目录/login/的HTTPs关闭,如果它关闭,那么它会强制它使用HTTPs。

    第二组规则检查 HTTPs 是否开启,如果开启则将关闭除/login/ 目录之外的所有内容。

    确保在测试之前清除缓存

    注意:

    我不知道您为什么不希望所有内容都是 HTTPs?...这将使网站更加安全,并允许您使用 HSTS。

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2017-04-20
      • 2020-08-07
      • 2018-05-05
      • 2020-11-24
      相关资源
      最近更新 更多