在app.php上使用mod_rewrite的Symfony2资产cssrewrite给出了不正确的basepath

时间:2013-09-03 15:50:33

标签: .htaccess symfony mod-rewrite assetic

使用cssrewrite时,我得到的路径不正确。它在URL中使用app_dev.php或app.php时工作正常,例如,mysite.com/site/app.php/login将正常运行。但是,使用mysite.com/site/login将不起作用。

查看CSS文件时,访问mysite.com/site/app.php/login时会看到以下内容:

 src: url('../../bundles/acmetest/font/fontawesome-webfont.eot?#iefix&v=3.2.1')

查看mysite.com/site/login时的正确路径应为:

 src: url('../bundles/acmetest/font/fontawesome-webfont.eot?#iefix&v=3.2.1')

这是我的htaccess文件:

DirectoryIndex app.php
<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]
    RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

有没有办法配置生产环境以知道其路径为/,而不是app.php/,以便正确配置cssrewrite路径?

这是我对资产的Twig配置:

{% block stylesheets %}
    {% stylesheets
        'bundles/acmetest/css/bootstrap.min.css'
        'bundles/acmetest/css/jquery-ui-1.10.3.custom.min.css'
        'bundles/acmetest/css/jquery.iphone.toggle.css'
        'bundles/acmetest/css/font-awesome.css'
        'bundles/acmetest/css/glyphicons.css'
        'bundles/acmetest/css/halflings.css'
        'bundles/acmetest/css/retina.min.css'
        'bundles/acmetest/css/style.css'
    filter='cssrewrite'
    %}
    <link rel="stylesheet" href="{{ asset_url }}" />
    {% endstylesheets %}
{% endblock %}

1 个答案:

答案 0 :(得分:0)

在继续之前 - 请仔细阅读this answer ...


现在实际上有两种可能的原因让我想到了。

首先,cssrewrite过滤器不适用于@Bundle - 语法。 (documentation reference

您必须在树枝模板中包含这样的样式表:

{% stylesheets 'bundles/my/css/style.css' filter='cssrewrite' %}
    <link rel="stylesheet" type="text/css" href="{{ asset_url }}" />
{% endstylesheets %}

此外,为了将您的资产转储用于生产......

 app/console assetic:dump --env=prod

...确保使用正确的环境设置转储它们。 (reference