【问题标题】:mod_rewrite & file_get_contents problemmod_rewrite & file_get_contents 问题
【发布时间】:2011-03-15 00:42:04
【问题描述】:

我有这个 .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 文件夹中,我有一个 rewrite.php 文件,如下所示:

#$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 变量

【问题讨论】:

  • 你让它变得不必要的复杂。你为什么不写下原来的问题?你可以得到一个简单的解决方案。
  • 原来的问题:我想用一个php文件来解析css和less文件。较少的文件将被转换为 css。并且 css 和 less 都应该被压缩。此外,我可能想根据某些用户设置(通过用户希望在其中显示网页的调色板中选择)将 less 文件中的一些变量替换为其他值。

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


【解决方案1】:

您的重写器正在循环。

由于您将 CSS 文件的名称传递给您的 PHP 脚本,您最终会得到如下内容:

.../css/rewrite.php?file=test.css

如果你从 css 文件夹中删除 rewrite.php 会更容易

【讨论】:

  • 即使我将重写规则更改为: RewriteRule ^css/(.*)\.(css|less)$ rewrite.php?file=$1 [NC] 并添加 . '.css' 到 $file - 它不起作用。
【解决方案2】:

PHP 脚本没有得到目录css,所以它正在寻找 /default.css 而不是 /css/default.css ;-)

【讨论】:

  • $file = dirname($_SERVER['SCRIPT_FILENAME']) 。 '/css/' 。 $_GET['文件'];
  • 您是否 100% 确定您没有打错字? localhost/d/IT2%20Tryggheim/…
  • 好吧,deafult.css 确实是一个错字,但是我在 css 文件的文件名和从 HTML 中引用 css 文件时都有错字。
  • 不使用file_get_contents,试试include
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 2011-07-09
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多