框架如何获得web root之外的images / css

时间:2013-12-25 15:25:33

标签: php

某些Web框架和CMS允许用户构建他们的主题,其中主题/文件夹中存在css /文件夹,并且通常位于Web根目录之外,他们如何检索它们,因为无法读取css文件没有网络根目录?

一个解决方案是Apache mod_rewrite中的Alias,但什么是更通用的PHP解决方案,特别是在MVC上下文中?

<IfModule mod_alias.c>

    Alias /images/ "/User/Public_html/Image/"

    <Directory "/User/Public_html/Image">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</IfModule>


theme/
css/
  test.css
view/
  test.html

的test.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" href="../css/test.css">
</head>
<body>

</body>
</html>

Web根目录之外的主题/文件夹。那么如何加载CSS文件呢?我对别名或将文件夹结构移动到Web根目录不感兴趣,因为它应该与“主题”保持一致,并且它位于Web MVC上下文中。

2 个答案:

答案 0 :(得分:2)

您可以创建一个代理脚本,用于从Web根目录下方抓取文件数据。例如,您可以将href标记的<link />属性设置为带有查询字符串参数的服务器端脚本,以指定应检索哪个文件。然后代理脚本将读取数据并获取正确的脚本,输出CSS文件。您甚至可以在代理脚本中发送Content-type标头,将输出指定为浏览器的CSS。

一句警告。不要只是公开允许使用此方法传递任何参数。列出你实际想要传递的内容,因为这可能是攻击的潜在压力点。例如,您不希望别人能够请求您的web.config.htaccess文件。

我发现这种方法在用户有特定样式表时非常有用,因此没有用户可以访问其他用户的样式。

答案 1 :(得分:0)

  

什么是更通用的PHP通用解决方案,尤其是在MVC环境中?

对于在应用程序中链接的资源,您可以使用内部链接方案。当处理模板/视图时,可以处理这些链接并将其转换为工作的超文本链接(通过可以解析这些链接的过滤器),以便客户端可以从您的服务器请求,就像那些是标准的HTML链接(http(s)方案)。

由于内部链接方案可以遵循它自己的规则,因此很容易在前端控制器中处理,负责提供响应。

修改/分化:

选择不同的URL-Scheme可能是错误的。并不是说它不会起作用,但在你所说的超文本应用程序的上下文中,在这里使用 Authority (参见Authority in RFC 3986, Section 3.2.)可能更明智,这样模块可以仍然指定目标URI方案(或提供relative reference),以便应用程序在协议方面更灵活。