Symfony2 - 从 URL 中删除 /Web


symfony2 - remove /web from urls

我正在管理一个用symfony 2.2编写的网站,托管在网络托管服务上。在Web开发中,我几乎是一个完整的新手,所以我可能犯了一些愚蠢的错误。

无论如何,我希望能够在没有/web 部件的情况下访问该网站。示例:"domain.com/symfony_site/web/mypage"->"domain.com/symfony_site/mypage"。

让我从一开始就说:我无法在服务器上手动配置 apache,我只能通过 FTP 访问它。我想我只剩下 .htaccess 文件解决方案了。

我已经尝试了我在互联网上找到的每一个解决方案(其中大部分来自这个网站),但没有一个有效。是的,mod_rewrite已启用。

我觉得最简单的解决方案是在站点的根目录(也包含/web 文件夹的目录)中添加一个 .htaccess 文件,其中包含以下内容:

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

这似乎确实可以正确重定向,但是如果我访问"domain.com/symfony_site/mypage",我会得到"在此服务器上找不到请求的 URL web/mypage"。

所需的主页"domain.com/symfony_site"intead给出了"您无权访问此服务器上的/symfony_site/",因此看起来这甚至没有正确重定向。

首先,您需要将.htaccess从 Web 目录移动到根目录(DocumentRoot )。

然后,打开移动的.htaccess,搜索所有出现的/app并用/web/app替换它们。
.htaccess(不带注释)应如下所示:

DirectoryIndex app.php
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::'2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app'.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]
    # Rewrite all other queries to the front controller.
    RewriteRule .? %{ENV:BASE}/web/app.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /web/app.php/
    </IfModule>
</IfModule>

现在,可以使用项目根目录正确浏览应用程序,如 DocumentRoot

此更改可能涉及调整加载资产的方式。

注意:这是一个快速而肮脏的替代方法,假设您无法更改应用程序的DocumentRoot以使其指向 Web 目录。

一个Symfony2应用程序被设计为在web/

下面是 Apache vhost 的示例配置。

<VirtualHost *:80>
  ServerName your.domain
  DocumentRoot "/path/symfony/web"
  <Directory "/path/symfony/web">
    Options Indexes FollowSymLinks
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

所以你的重写规则不是必需的