我目前正在尝试使用一个脚本,以确保用户登录到一个中央登录系统。
问题是,这个子文件夹中的任何文件,包括PHP和图像文件,在包含时都无法访问,无论是简单地使用<?php include 'file.php' ?>
时,只是作为图像,即<img src="image.png" />
等。
RewriteEngine on
# The original URL is set as an environment variable SSO_REQUESTED rather than
# a query parameter, so it's not vulnerable to hacking.
# It shows up in PHP as $_SERVER['REWRITE_SSO_REQUESTED'].
RewriteCond %{REQUEST_URI} !ssoclient
RewriteRule (.+) /sso/ssoclientfilter.php [E=SSO_REQUESTED:$1,L]
如果您的代码的目的是确保您的用户登录到一个中央登录系统,那么PHP代码:
<?php
if (!isset ($_COOKIE[ini_get('session.name')])) {
session_start();
}else{
print "<SCRIPT>window.location='/sso/ssoclientfilter.php';</SCRIPT>";
}
在上面的代码中,任何之前没有启动会话的人都会被定向到您的ssoclientfilter.php,而您的其他图像和文件夹不会被触及。session_start()所在的位置应该可以解决问题。
使用include的相对路径是非常糟糕的行为。您确实应该在脚本中为文档根路径设置一些变量或常量。HTML也是一样:你应该在header中包含BASE标签,为你的图像、样式、脚本等的相对路径设置基(根)。另外,在你的htaccess中设置RewriteBase也是很有用的。
然而,奇怪的是,htaccess也影响php的include,它通常使用文件系统的路径,而不是URI。