某些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上下文中。
答案 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),以便应用程序在协议方面更灵活。