.htaccess文件影响包括文件(包括图像)


.htaccess file affecting include files (including images)

我目前正在尝试使用一个脚本,以确保用户登录到一个中央登录系统。

问题是,这个子文件夹中的任何文件,包括PHP和图像文件,在包含时都无法访问,无论是简单地使用<?php include 'file.php' ?>时,只是作为图像,即<img src="image.png" />等。

我在。htaccess文件中使用的代码如下:
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。