Apache 在htaccess中,如何编写只在特定条件下才起作用的重写(RewriteRule)(RewriteCond)?

Apache 在htaccess中,如何编写只在特定条件下才起作用的重写(RewriteRule)(RewriteCond)?,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,如果请求的是www.website.com/index.php我希望显示www.website.com/login/index.php。 但是如果请求的是www.website.com/index.php?任何查询我希望显示www.website.com/index.php?任何查询。 换句话说,如果URL包含任何查询,它会准确地回答该地址。否则,所有内容都必须通过/login/目录中的index.php。 我希望我已经解释清楚了。多谢各位 编辑以提高清晰度 我解释问题是什么样子的。当我点击标签

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

编辑以提高清晰度

我解释问题是什么样子的。当我点击标签
(在文件
/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]
当前重定向分析

目前的情况如下。当我访问网站时

  • 301https://website.com/ 服务器重定向永久https://website.com/login/index.php
  • 200https://website.com/login/index.php
  • 当我点击

  • 301http://website.com/index.php?r=adm/lostpwd 服务器重定向永久https://website.com/index.php?r=adm/lostpwd
  • 200https://website.com/index.php?r=adm/lostpwd
  • 当我在页面
    /login/index.php
    中提交表单时,将生成SSO的链接(
    标题(“位置:”.$link);
    )。这是生成的流量:

  • 302https://website.com/login/index.php 服务器重定向临时https://website.com/index.php?r=adm/sso&login_user=username&time=1000&token=abcde
  • 302https://website.com/index.php?r=adm/sso&login_user=username&time=1000&token=abcde 服务器重定向临时https://website.com/index.php
  • 301https://website.com/index.php 服务器重定向永久https://website.com/login/index.php
  • 200https://website.com/login/index.php
  • In/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;
    }
    

    您可以在site root.htaccess中使用以下简单代码:

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

    请确保此.htaccess中没有其他规则,并且
    登录
    目录

    @anubhava中没有.htaccess,如果我评论重定向没有按照我希望的方式工作,则仅上述情况3由我建议的规则处理。案例1和案例2是通过PHP代码驱动的。现在请澄清是哪种情况造成了麻烦,以及需要什么行为。@anubhava请查看我是如何修改当前重定向的分析的。我认为您的href应该是:
    以及上一节中的案例2,即
    302https://website.com/index.php?r=adm/sso&login_user=username&time=1000&token=abcde 服务器重定向临时https://website.com/index.php
    是个谜,因为显示的PHP代码不同。还有其他一些PHP代码正在执行此操作请原谅@anubhava:(该
    http://www.website.com/login/index.php?r=adm/lostpwd
    链接重定向得很好。但以下内容不是:
    http://website.com/index.php?r=adm/sso&login_user=xxx&time=xxx&token=abc
    http://website.com/index.php?r=adm/sso&login_user=xxx&time=xxx&token=abc
    将保持上述规则不变。在新的br中测试owser。你也可以随时在这里发表评论,我会回复,没有必要删除接受标记。我为接受标记道歉。不幸的是,最后一个链接不起作用。点击a标记无法到达它,但在phpSorry中有
    标题(“Location:”.$link)
    ,但请注释掉
    标题(“Location:”.$link)
    我们在.htaccess中完全处理重定向时的代码。如果是出于特定目的,我建议您展示有问题的php代码并澄清特殊逻辑。请参阅我如何修改当前重定向的分析