在web服务器上部署symfony时加载资源失败:没有导入资源,加载资源失败,错误404



我正在尝试部署一个symfony应用程序用于生产测试。我遵循了许多步骤,我将解释:

  1. 首先,我安装了CoreSphereConsoleBundle,以便有一个浏览器控制台。在我的本地配置(windows 7和wamp服务器apache),当我想使用她我写这个url C:wampwwwmyAppapp_web.php_console。效果很好。但是在我的OVH共享服务器中,当我写www.mydomain.com/web/_console时,它根本不工作(我不明白为什么!)。

  2. 然后我按照symfony文档的步骤;e-g我清除了php app/console cache:clear缓存,也为php app/console cache:clear --env=prod

  3. 的prod环境清理了缓存。
  4. 我允许调试模式

webapp.php:

<?php
// web/app.php
// …
$kernel = new AppKernel('prod', true); // set the 2nd argument to true
  • 我检查兼容性服务器:
  • web/config.php:

    /*if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
      '127.0.0.1',
      '::1',
    ))) {
      header('HTTP/1.0 403 Forbidden');
      exit('This script is only accessible from localhost.');
    }*/
    

    因此,当我显示url www.mydomain.com/web/config.php时,我有很好的配置页面,没有错误。当然,在我允许我自己的IP adresscachelogs文件夹也允许chmod 777之后。

    我编辑我的.htaccess 文件。我有两个haccess文件,一个在我的服务器的根目录,另一个在web文件夹。

    /.htaccess(根服务器)

    SetEnv SHORT_OPEN_TAGS 0
    SetEnv REGISTER_GLOBALS 0
    SetEnv MAGIC_QUOTES 0
    SetEnv SESSION_AUTOSTART 0
    SetEnv ZEND_OPTIMIZER 1
    SetEnv PHP_VER 5_4_11
    AddType x-mapp-php5 .php
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ web/app.php [QSA,L]
    

    /web/.htaccess (web文件夹):

    SetEnv SHORT_OPEN_TAGS 0
    SetEnv REGISTER_GLOBALS 0
    SetEnv MAGIC_QUOTES 0
    SetEnv SESSION_AUTOSTART 0
    SetEnv ZEND_OPTIMIZER 1
    SetEnv PHP_VER 5_4_11
    AddType x-mapp-php5 .php
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
    
  • 我做所有的配置我需要的框架(数据库配置与学说为我的服务器,框架配置等)。
  • 一切都工作得很好,例如我的应用程序正在部署和显示,当我去主页。但是我的资产未加载。事实上,我的css files, js filesimages没有导入

    当我部署symfony应用程序时,我在哪里犯了错误?

    我认为我必须在服务器上安装资产,但我无法访问CoreSphereConsoleBundle console,并注意到我有一个共享服务器而不是专用服务器。在主页上,我的浏览器本地控制台(google chrome)显示了每个脚本,css文件和其他客户端针头的错误:

    加载资源失败:服务器以404状态响应(未找到)

    我在我的应用程序中正确地导入了我的资产,并且在我的本地配置中它可以工作:

    layout.html.twig:

    {% block script %}
      <script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
      <script src="{{ path('fos_js_routing_js', {'callback': 'fos.Router.setData'}) }}"></script>
      {% javascripts
        '@MySpaceMyBundle/Resources/public/js/jquery-2.1.3.min.js'
        '@MySpaceMyBundle/Resources/public/js/bootstrap.min.js'
        '@MySpaceMyBundle/Resources/public/js/hinclude.min.js'
        ...
        'http://code.highcharts.com/stock/highstock.js'%}
        <script type="text/javascript" src="{{ asset_url }}"></script>
      {% endjavascripts %}
    {% endblock %}
    {% block stylesheets %}
      <link rel="stylesheet" href="{{ asset('bundles/MySpaceMyBundle/css/bootstrap-theme.min.css') }}" type="text/css" media="all"/>
      <link rel="stylesheet" href="{{ asset('bundles/MySpaceMyBundle/css/bootstrap.min.css') }}" type="text/css" media="all"/>
      ...
      {# animate CSS #}
      <link rel="stylesheet" href="{{ asset('bundles/MySpaceMyBundle/css/animate.min.css') }}" type="text/css" media="all"/>
      {# dataTables CSS #}
    {% endblock %}
    

    我检查了这个包。在它的安装指南中,他们要求你在routing_dev.yml

    中添加他们的路由
    #app/config/routing_dev.yml
    _console:
        resource: "@CoreSphereConsoleBundle/Resources/config/routing.yml"
        prefix: /_console
    

    因为你已经将应用的ENV设置为prod,所以routing_dev中的路由。

    如果你想访问PROD ENV中的/_console,你应该移动他们给app/config/routing.yml的路由配置

    Bundle安装指导你在AppKernel的dev部分注册Bundle。

    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        // ...
        $bundles[] = new CoreSphereConsoleBundleCoreSphereConsoleBundle();
    }
    

    你应该把它移到其他bundle(非dev)注册的地方。

    PS:一旦你这样做了,控制台就会工作,但这是一个严重的安全问题,并且为任何人提供了一种简单的方法来做他们想做的任何事情。

    ,这就是为什么你应该限制这个bundle只在本地使用。如果您真的想在PRO环境中启用此功能,我强烈建议您配置安全防火墙,将路由访问限制为仅站点管理员

    的例子:

    #app/config/security.yml    
    access_control:
            - { path: ^/_console$, role: ROLE_ADMIN }
    

    相关内容

    • 没有找到相关文章

    最新更新