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
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代码并澄清特殊逻辑。请参阅我如何修改当前重定向的分析