从url中删除web / app_dev.php /

时间:2014-01-21 13:26:41

标签: symfony

我在symfony 2中完成了我的申请 现在我想从网址中删除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 /? 我怎么能丢失样式表?

2 个答案:

答案 0 :(得分:4)

要删除网页,您只需修改您的apache配置即可将网站设为根目录。

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

Apache Virtual Host Complete配置的例子:

<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文件夹

注意:我不添加<IfModule mod_rewrite.c></IfModule>因为如果你没有它,你需要apache通知你缺少这个模块。

答案 1 :(得分:2)

Apache / mod_rewrite配置

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

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

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

样式表问题

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

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

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

现在捆绑包的Resource文件夹中的资源在被移动/符号链接到web文件夹后才能访问,您可以在其中找到assets:install和{{1命令。