我正在尝试编写支票,根据用户在网站注册过程中的进度来重定向用户。我有这个:
if($user = VRComponent::getLogin()) {
if(VR::exists('vr_user','Signup',"userID={$user->ID}")) {
$step = VR::select('vr_user','Signup',"userID={$user->ID}");
$step = intval($step[0]['step']);
if(!isset($_GET['step']) || $step != intval($_GET['step'])) {
switch($step) {
case 1: header("Location: /signup/one"); exit; break;
case 2: header("Location: /signup/two"); exit; break;
case 3: header("Location: /signup/three"); exit; break;
case 4: header("Location: /signup/four"); exit; break;
}
}
} else {
header("Location: /account");
exit;
}
} else {
header("Location: /");
exit;
}
exists和select函数基本上只是mysql函数的别名。
本质上,这将检查用户是否已登录。如果是,则检查他们是否已完成注册过程。如果没有,它会检查“页面”获取var是否实际上是它们所在的最后一页。如果没有,它会将它们重定向到正确的页面。
逻辑工作,但页面引用的所有外部js和css文件都不会加载。奇怪的是他们不会抛出404,而是文件的唯一内容是:
Failed to load source for: https://domain.com/path/to/file/style.css
另一个奇怪的事情是,即使if语句的条件为false,文件也不会加载。注释掉switch语句(即使if条件为false)也允许加载文件,但当然逻辑也不正确。
我认为它几乎必须是简单的,但我只是没有看到它。我正准备将拳头放在我的显示器上,因为这种行为对我来说毫无意义。
提前致谢了-D
答案 0 :(得分:3)
我想你正在使用mod-rewrite来处理signup/*
?如果是这样,您可能需要在HTML的<base href="APPROPRIATE BASE" />
中声明<head>
,以便浏览器不会在假定的注册文件夹中查找css / js =)
答案 1 :(得分:0)
更新:我睡着了,当我醒来的时候,我发现了实际的问题(很清楚头脑可以做到这一点很神奇)。原来PHP正在完成我告诉它要做的事情。因为我从来没有对任何第三方PHP框架感到满意,所以我决定在不久前建立自己的PHP框架。它所做的一件事就是自动剔除任何给定页面中使用的所有css和js文件到单个文件中,以减少http请求的数量。它还反映了那些css / js文件中主页的要求,我设置了apache,因此它将执行内联PHP。因此,js / css文件需要问题代码,然后重定向到其中一个注册页面,因为$ _get ['step']未定义。不过,这种东西让我很高兴我使用自己的框架。当然,有时它会让我想要像一个在某些僵尸身上斧头的男人一样去中世纪,但是它提供的自由以及随着我远远超过愤怒而进化的能力。不仅如此,它使得一切都比我使用的任何其他框架更容易(当我实际编码时)。也许有一天,当我觉得它准备好迎接黄金时段时,我会把它发布给公众。
的旧------------------------------------
经过几个小时的研究,我修好了!
问题是各种各样的重定向循环。由于我不知道的原因,外部文件正在通过我的OP中的块从php文件运行,然后将该位置更改为其中一个重定向。
为了修复它,我检查了'。 php_self中的css'和'.js',如果找到则禁止重定向。这是修改后的代码:
if($user = VRComponent::getLogin()) {
if(VR::exists('vr_user','Signup',"userID={$user->ID}")) {
$step = VR::select('vr_user','Signup',"userID={$user->ID}");
$step = intval($step[0]['step']);
$css = stripos($_SERVER['PHP_SELF'],'.css');
$js = stripos($_SERVER['PHP_SELF'],'.js');
if(!$css && !$js && (!isset($_GET['step']) || $step != intval($_GET['step']))) {
switch($step) {
case 1: header('Location: /signup/one');
break;
case 2: header('Location: /signup/two');
break;
case 3: header('Location: /signup/three');
break;
case 4: header('Location: /signup/four');
break;
}
}
} else
header("Location: /account");
} else
header("Location: /");