mod_rewrite& file_get_contents问题

时间:2011-03-14 15:24:35

标签: php mod-rewrite file-get-contents

我有这个.htaccess文件:

Options +FollowSymLinks  
Options +Indexes  
RewriteEngine On

RewriteBase "/d/IT2 Tryggheim/it prosjekt 2011 - 2. termin/css/"
RewriteRule ^css/(.*\.(css|less))$ rewrite.php?file=$1 [NC]

在css文件夹中我有一个看起来像的重写文件:

#$file = $_GET['file'];
$file = dirname($_SERVER['SCRIPT_FILENAME']) . '/' . $_GET['file'];

if(file_exists( $file ))
{
    $content = file_get_contents($file);
    # TODO: add code that parses the $content variable
    echo $content;
}
else
{
    echo "Weeeee! The file (<i>$file</i>) does not exist! :D <br /> <br />";
}

这都是在Wampserver上测试过的。如果我直接进入这条路径就可以了:

http://localhost/d/IT2%20Tryggheim/it%20prosjekt%202011%20-%202.%20termin/css/deafult.css

如果我有一个文件,其中一个目录中包含以下HTML,则它不起作用:

<link rel="stylesheet" type="text/css" href="css/deafult.css" />

或者,除非我禁用.htaccess,否则它不起作用,然后它可以正常工作。那么如何让php加载文件呢?

我试过的$ file的替代品,哪些无效

$file = dirname($_SERVER['SCRIPT_FILENAME']) . '/css/' . $_GET['file'];
$file = '/css/' . $_GET['file'];
$file = 'css/' . $_GET['file'];
$file = './css/' . $_GET['file'];

我试过的其他内容

  • 尝试使用include而不是file_get_contents
  • 尝试使用文件名('deafult.css')进行硬编码,而不是使用$ _GET变量

3 个答案:

答案 0 :(得分:1)

你的rewriterule正在循环。

由于您将CSS文件的名称传递给PHP脚本,因此最终会出现以下内容:

... / css / rewrite.php?file = test.css&lt; - 它再次匹配你的重写。

如果从css文件夹

中删除rewrite.php会更容易

答案 1 :(得分:0)

PHP脚本没有获取目录css,因此它正在寻找/default.css而不是/css/default.css; - )

答案 2 :(得分:0)

我在rewrite.php文件的顶部添加了这个,现在它可以工作了! :d

header('Content-type: text/css');