微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在htaccess中,如何编写仅在特定条件下起作用的RewriteRewriteRuleRewriteCond?

如何解决在htaccess中,如何编写仅在特定条件下起作用的RewriteRewriteRuleRewriteCond?

如果请求是针对www.website.com/index.PHP,我希望显示www.website.com/login/index.PHP。 但是,如果请求是针对www.website.com/index.PHP?any-query的,我希望显示www.website.com/index.PHP?any-query。 换句话说,如果URL包含任何查询,则它将准确回答该地址。否则,所有内容都必须通过/ login /目录中的 index.PHP 。 我希望我已经更清楚地解释了自己。谢谢。

编辑以提高清晰度

我解释问题的模样。当我单击标签<a href="http://www.website.com/index.PHP?r=adm/lostpwd"></a>(在文件/login/index.PHP中)时,它会以http://www.website.com/login/index.PHP?r=adm/lostpwd进行响应,相反,我希望它以http://www.website.com/index.PHP?r=adm/lostpwd来进行精确响应

编辑2 >>>当前/.htaccess

RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+(?:index\.PHP)?\sHTTP [NC]
RewriteRule ^ /login/index.PHP [R=301,L]

当前重定向分析

当前情况如下。当我访问website.com

  1. 301 https://website.com/ server_redirect permanent https://website.com/login/index.PHP
  2. 200 https://website.com/login/index.PHP

当我单击/login/index.PHP时在页面<a href="http://website.com/index.PHP?r=adm/lostpwd"></a>

  1. 301 http://website.com/index.PHP?r=adm/lostpwd server_redirect permanent https://website.com/index.PHP?r=adm/lostpwd
  2. 200 https://website.com/index.PHP?r=adm/lostpwd

当我在页面/login/index.PHP中提交表单时,将生成SSO的链接header("Location: " . $link);)。这是产生的流量:

  1. 302 https://website.com/login/index.PHP server_redirect temporary https://website.com/index.PHP?r=adm/sso&login_user=username&time=1000&token=abcde
  2. 302 https://website.com/index.PHP?r=adm/sso&login_user=username&time=1000&token=abcde server_redirect temporary https://website.com/index.PHP
  3. 301 https://website.com/index.PHP server_redirect permanent https://website.com/login/index.PHP
  4. 200 https://website.com/login/index.PHP

在/login/index.PHP中:

这是单点登录链接生成

if (password_verify($password_entered,$password)) {
    $time = time();
    $key = "abcde";
    $token = "abcde";
    $link = "https://www.website.com/index.PHP?r=adm/sso&login_user=".$user."&time=".$time."&token=".$token;
    header("Location: " . $link);
    exit;
}

解决方法

您可以在网站根.htaccess中使用以下简单代码:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+(?:index\.php)?\sHTTP [NC]
RewriteRule ^ /login/index.php [R=301,L]

确保此.htaccess中没有其他规则,并且 login/目录中没有.htaccess。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。