如何修复生产服务器上的CSS加载问题

Ali*_*nna 5 css deployment routing symfony

我的网站现在托管在服务器上,URL像这样

test1.test.com 
Run Code Online (Sandbox Code Playgroud)

但是现在我必须将其移至他们没有此功能的另一台主机,我不得不将其更改为:

test.com/test1
Run Code Online (Sandbox Code Playgroud)

到现在为止,一切正常,除了CSS和JS文件,我得到404 not found错误。

就我而言,我没有做任何更改,这就是我加载CSS文件的方式

        <link rel="stylesheet" href="{{ asset('css/main.css') }}">
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?当然,我尝试在{{ asset('css/main.css')}} 之前添加(test1),但没有任何改变。

PS:源代码未保存在/ test1的子目录下,而只是路由至负载均衡器。

这是docker映像的apache2设置文件:

    <VirtualHost *:80>
    DocumentRoot /var/www/html/web
    <Directory /var/www/html/web>
        AllowOverride None
        Require all granted

        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>

    ErrorLog /var/log/apache2/app_error.log
    CustomLog /var/log/apache2/app_access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

部署是在使用docker image的云服务器上进行的,并且在本地,无论我以何种方式访问​​网站,它都可以正常工作。任何想法或设置可能会有所帮助?提前致谢

exs*_*ide 5

它使用相对路径,因此,如果您的“基本”路径为/ test1,则相对路径将在名为/test1/css/css文件的文件夹中查找。

根据您的symfony版本,该 asset()函数允许使用absoluteconfig参数来使路径绝对化,因此:如果包含如下所示的静态文件,会发生什么情况:

<link rel="stylesheet" href="{{ asset('css/main.css', absolute=true) }}" />
Run Code Online (Sandbox Code Playgroud)

如果您使用的版本高于3.0,请使用:

<link rel="stylesheet" href="{{ absolute_url(asset('css/main.css')) }}" />
Run Code Online (Sandbox Code Playgroud)


Ali*_*nna 0

我只想感谢每一位试图帮助我解决问题的人,但现在我找到了问题和解决方案:

该问题与 symfony 本身无关,但与托管服务有关,似乎是服务提供商正在使用 ingress 和 Kubernetes,而 ingress 不支持静态文件(css、js)加载。如果您有权访问服务器设置文件,则有解决方法,但在我的情况下没有。

我的解决方案是将静态文件作为服务提供。它类似于我的资产和所有静态文件的私有 CDN。

再次感谢,如果有人有同样的情况,我将非常乐意提供帮助。