在没有app.php的情况下让Symfony2在GoDaddy上工作

时间:2013-07-10 05:59:34

标签: .htaccess symfony

我的GoDaddy生产服务器上安装了Symfony网站。当我使用网址www.amcolan.info/Symphony/web/app.php/index时它工作正常。我想把它设置为www.amcolan.info/index。

我通过GoDaddy控制面板将域名更改为指向amcolan / Symfony / web文件夹。它曾经指向/ amcolan,其中包含我的网站的工作版本。完成设置后,我安装了以下.htaccess文件:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    # Explicitly disable rewriting for front controllers
    RewriteRule ^/app_dev.php - [L]
    RewriteRule ^/app.php - [L]

    # Fix the bundles folder
    RewriteRule ^bundles/(.*)$ bundles/$1  [QSA,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    # Change below before deploying to production
    RewriteRule ^(.*)$ app.php [QSA,L]
    #RewriteRule ^(.*)$ app_dev.php [QSA,L]
</IfModule>

我从本网站上的另一个相关问题中获取了代码并修改了我的目的。原版本打算存在于Symfony目录中。然后我清除了生产缓存并尝试访问页面。它导致内部服务器错误。我的代码中有错误吗?你认为这将由Sensio很好地记录,因为我想99%的实现都必须这样做。现在我只是苦涩。

根据建议,我尝试了Symfony附带的以下代码:

<IfModule mod_rewrite.c>
    RewriteEngine On

    <IfModule mod_vhost_alias.c>
        RewriteBase /
    </IfModule>

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

我也尝试过:

<IfModule mod_rewrite.c>
    RewriteEngine On

    #<IfModule mod_vhost_alias.c>
        #RewriteBase /
    #</IfModule>

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

我得到了和以前一样的错误。为了确保我到达目录,我添加了一个index.php文件,然后我才能访问它。

更新2

在了解更多有关goDaddy特定问题的内容之后,我在goDaddy论坛上发现了一条帖子,说RewriteEngine已经开启了。我没有影响地删除了该代码。然后我决定试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://www.amcolan.info/app.php/index [QSA,L]

虽然我怀疑不正确,但它仍然有效。我在app.php /之后首先尝试了没有索引的。这让我进入symfony,但产生了一个get错误。它似乎是因为一个null参数,所以我添加了索引。因此,无论有人在www.amcolan.info之后输入什么,它都会进入索引。进入Symfony页面后,您可以导航到站点中的其他页面。所以现在我有三个新问题:

在读取.htaccess文件时,是否知道Web服务器指向的位置?你会认为在/ web目录中文件所在的位置。由于仅指定app.php而不是完整路径不起作用,因此情况并非如此。它会成为我网站的基础吗?

成功重定向www.amcolan.info后,显示的URL为www.amcolan.info/app.php/index。我不希望在URL中看到/app.php,但我怀疑它不可能与实际目的地一样多。这是正确的假设吗?

如何获取www.amcolan.info/somepage转到www.amcolan.info/app.php/somepage而不是硬编码索引?

更新3

我以为自己被卡住了,但后来我试过了:

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php/index [QSA,L]

摆脱了必须使用完整的URL,现在目标页面不再显示app.php。我有一个新问题:只需指定www.amcolan.info就会导致上面提到的get错误。指定www.amcolan.info/somepage不再需要我到索引,而是指向指定的页面。请继续关注,我可以通过更多的挖掘来解决我的最后一个问题。

更新4

我通过在路由文件中添加以下内容来修复最后一个问题:

nopage:
    pattern:  /
    defaults: { _controller: ZetchoAmColAnBundle:Default:index }
    requirements:
        _method:  GET

我认为我现在是一个快乐的露营者。

1 个答案:

答案 0 :(得分:1)

索引操作不是必需的。您也可以轻松配置根路由的任何操作。

这是我在GoDaddy上的完整.htaccess文件,最终有效。它仅适用于prod config(app.php),app_dev.php运行不正常,但这对我来说没问题,因为它用于生产环境。

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