2011-09-22 86 views
1

我目前正在尝试使用确保用户登录中央登录系统的脚本。.htaccess文件影响包含文件(包括图像)

的问题是,当包含的任何文件,包括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] 

任何帮助在这里将不胜感激。

回答

0

如果你的代码的一点是要确保你的用户登录到中央的登录系统不会PHP代码:以前

<?php 

if (!isset ($_COOKIE[ini_get('session.name')])) { 
    session_start(); 
}else{ 
    print "<SCRIPT>window.location='/sso/ssoclientfilter.php';</SCRIPT>"; 
} 

在上面的代码,未经会话开始被引导到你的ssoclientfilter.php,你的其他图像和文件夹不会被触及。这放在你的session_start()所在的位置应该覆盖你的问题。

+1

最后,我发现的解决方案是在每个页面的顶部简单地包含登录脚本,我想保护它。这意味着这些子文件夹中的任何其他文件都可以继续访问。 我无法将其作为重定向,因为脚本无法直接访问。 – Ollie

0

使用include的相对路径是非常不好的行为。你真的应该在你的脚本中用文档根路径设置一些变量或常量。同样的HTML:你应该在标题中包含BASE标记来为你的图像,样式,脚本等的相对路径设置基础(根)。另外,在你的htaccess中设置RewriteBase也许很有用。

但是,奇怪的是,htaccess还影响php的include,它通常使用文件系统的路径,而不是URI。