【问题标题】:Remove web/app_dev.php/ from url从网址中删除 web/app_dev.php/
【发布时间】:2014-01-21 13:26:41
【问题描述】:

我已经完成了我在 symfony 2 中的应用程序。
现在我想从 url 中删除 web/app_dev.php/。

我读到了这一点,在这样做之后:

php app/console cache:clear --env=prod --no-debug

并添加 .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>

在此之后我可以使用 url:localhost/test/web/ 但这不完全是我的目标。我也想删除网络。

在这之后还有另一个问题。当我使用 localhost/test/web/ 访问页面时,缺少一些样式表,但在 app_dev.php 中一切看起来都不错。

我的问题是,如何从网址中删除 /web/? 我怎么能丢失样式表?

【问题讨论】:

    标签: symfony


    【解决方案1】:

    要删除 web,您只需修改 apache 配置以将 web 作为根目录。

        DocumentRoot /yourpath/www/web
        <Directory /youpath/www/web/>
    

    Apache 虚拟主机完整配置示例:

    <VirtualHost *:80>
        ServerName www.yourdomain.com
        DocumentRoot /yourpath/www/web
    
        <Directory /yourpath/www/web>
            Options FollowSymLinks
            AllowOverride None
            Require all granted
            Allow from All
    
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ /app.php [QSA,L]
        </Directory>
    
        LogLevel warn
        ErrorLog ${APACHE_LOG_DIR}/your_site.error.log
        CustomLog ${APACHE_LOG_DIR}/your_site.log combined
    </VirtualHost>
    

    在生产中你应该删除app_dev.php 并设置为根目录 symfony web 文件夹

    注意:我没有添加&lt;IfModule mod_rewrite.c&gt;&lt;/IfModule&gt;,因为如果您没有它,您希望 apache 通知您您缺少此模块。

    【讨论】:

      【解决方案2】:

      Apache/mod_rewrite 配置

      要删除/web 部分,您可以另外设置RewriteBase

      <IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteBase /web/
          ...
      

      ... 或将 DocumentRoot 直接设置为 apache VirtualHost 配置中的 web 文件夹。

      样式表问题

      prod 环境中缺少的样式表可以通过调用assets:install 命令来解决。

      dev 中,symfony 将直接从包的Resources/public 文件夹中提供文件,因为默认的config_dev.yml 包含assetic.use_controller: true

      出于性能原因,默认生产配置具有assetic.use_controller: false。资产不会在每次请求时都通过 symfony 重新编译和提供服务。

      现在,捆绑包的 Resource 文件夹中的资产无法访问,直到它们被移动/符号链接到 web 文件夹,您的网络服务器可以在其中找到它们,assets:installassetic:dump 命令可以做到这一点。

      【讨论】:

      • /web 问题已解决,但现在无法修复样式表,我运行命令 php app/console assets:install --env=prod 然后我清理缓存,仍然是同样的问题。我正在使用 cssless 来生成这个样式表
      • 请为样式表问题打开一个单独的问题并提供更多信息。哪些文件没有被加载?只有部分还是全部?您的文件来自哪里(即 Bundle/Resources/public )?您如何将它们包含在您的模板中(即使用 {{ asset(..) }}{% stylesheets .. } ?生成什么 URL 并返回 404 错误(请参阅 firebug/devtools 网络面板)?请同时包含您的 prod 环境的资产配置。跨度>
      • 我修复了所有问题,.htaccess 和丢失的图片,但现在只是图标不显示!我正在使用带有引导图标的模板,但它们不显示
      猜你喜欢
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多