我正在管理一个用symfony 2.2编写的网站,托管在网络托管服务上。 我几乎是一个完整的网络开发新手,所以我可能犯了一些愚蠢的错误。
无论如何,我希望能够在没有/ 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>
这似乎正确地重定向,但后来我得到了“在此服务器上找不到请求的URL web / mypage”。如果我访问'domain.com/symfony_site/mypage'。
所需的主页'domain.com/symfony_site'intead给出了“您无权访问此服务器上的/ symfony_site /。”,因此看起来这甚至无法正确重定向。
答案 0 :(得分:2)
首先,您需要将.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
以使其指向网络目录,那么这是一个快速而又肮脏的选择。
答案 1 :(得分:1)
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>
所以你的重写规则不是必需的