如果我转到此URI
/app_dev.php/css/eabd201_jquery.ui.theme_15.css
它给了我CSS文件,这是我所期望的,但如果我转到这个URI,
/app_dev.php/css/images/ui-icons_222222_256x240.png
我收到此错误:
找不到“GET /css/images/ui-icons_222222_256x240.png”的路线
似乎必须有办法告诉Symfony不要尝试通过/css/*
路径的路由。 (我知道文件存在。)我怎么能这样做?
编辑:这是我的.htaccess
文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
答案 0 :(得分:1)
我不知道这是不是你的情况,但想象一下目录结构:
├── css
│ ├── style.css
├── images
│ ├── foo.png
在style.css
中,只要您使用url(../images/foo.png)
等相对路径引用图片,如果将style.css
移动到另一个目录中就无法使用。
您正在使用Assetic来渲染CSS文件,因此将此CSS文件“移动”到/app_dev.php/css
目录中,该目录实际上并不存在,并由app_dev.php
控制器处理。所以现在,图像的相对路径并不指向图像,而是/app_dev.php/images/foo.png
,它也不存在,并且由app_dev.php
控制器处理。
希望这是一个非常常见的问题,并且有一个内置解决方案:cssrewrite
过滤器。
您可以将其添加到{% stylesheet %}
代码:
# app/config/config.yml
assetic:
# ...
filters:
cssrewrite: ~
的
{# your template #}
{% stylesheet 'bundles/foo/css/style.css' filter='cssrewrite' %}
或将其应用于每个CSS文件:
# app/config/config.yml
assetic:
# ...
filters:
cssrwrite:
apply_to: \.css$
它将负责为您重写这种路径。