1

我在我的 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 错误。这似乎是因为一个空参数,所以我添加了索引。因此,无论有人在 www.amcolan.info 之后输入什么内容,它都会进入索引。进入 Symfony 页面后,您可以导航到站点中的其他页面。所以现在我有三个新问题:

知道 Web 服务器在读取 .htaccess 文件时指向的位置吗?您会认为 /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

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

4

1 回答 1

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>
于 2013-12-02T20:55:40.817 回答