我有一个框架,通过一个基本文件路由所有传入的URI,并处理静态文件我有一个子目录/静态,我把所有的CSS,JS和图像(即./静态/ css/main.css)为了保持清醒.
我自己的代码和插件处理这个很好,但有时需要实现其他代码,并且CSS文件通常会尝试调用这些文件中的URI.我怎样才能以最好的方式处理这个问题?
一个例子 ;
/ about /公司路由到/ script?q = about/company并锁定网站的主要结构.然而; /static/css/main.css使用来自的背景图片; /static/images/widget/bg-color.png
由于这是一个框架,我不乐意对CSS文件中的/ static路径进行硬编码.首先,我不希望将网站限制为仅从某个根目录提供.:)对于所有JS,有对象处理这个问题(即.var x = $ xs_dir.js +'/ script.js';)但CSS没有任何内容.我认为我有五种选择;
(最糟糕)在我的管理工具中有一个选项,它扫描所有CSS文件以获取URI引用,并使用正确的静态目录预先添加它们,并将所有CSS编写为好像它们是静态的根目录.
(差)依靠网络服务器将任何静态目录别名到一个根静态目录的能力,并让管理员处理它.
(meh,slow)通过框架提供CSS文件,使用正确的静态路径过滤URI.
(最简单,但不是很容易)手工编写CSS文件的静态部分,以便进行任何可能的服务器设置,并确保它们易于查找和更改.
(可能是最好的,但很复杂?)有一个重写规则,可以检测当前目录中的图像,将它们转发到静态目录,并用一些识别的动态路径写入所有CSS.(即代替/static/images/img.png执行images/img.png并依赖重写规则将其推送到需要的位置,同时限制网站结构永远不会有一个名为'images'的子目录)
还有其他选择吗?想法?我知道Joomla和类似的有一些文件的重写,可能没有.5?
不确定你是否有.htaccess文件,但是一个选项是在文件夹"images"下为请求添加重写规则,以重定向到静态(或其他)文件夹:
RewriteRule ^[^\?]*(images/)(.*)$ /static/$1$2 [NC,L]
Run Code Online (Sandbox Code Playgroud)
这样,您可以将所有图像引用为CSS中的/images/whatever.png.
如果您需要为不同的服务器设置不同的设置,则可以为每个环境或服务器提供单独的.htaccess文件,并对这些文件进行版本控制.