1

我在共享服务器上使用 Symfony2,并且一直在尝试解决我遇到的问题。我想去掉app.php登陆页面,同时指向symfony的web目录作为根目录。

所以设置根目录很容易。

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^/symfony/web/
RewriteRule ^(.*)$ /symfony/web/$1 
</IfModule>

不过,我被困在这之后。我试过

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^/symfony/web/
RewriteRule ^(.*)$ /symfony/web/$1 

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

</IfModule>

认为这将按顺序运行。然而,事实并非如此。相反,它似乎寻找这两个条件,然后同时运行这两个规则。例如,如果我调用 example.com/app.php,它将获取 example.com/symfony/web/app.phpapp.php。我尝试了各种标签的各种组合,我得出的结论是它们总是同时运行,这与我在互联网上读到的相反。官方文档真的很少有例子,并没有回答我遇到的问题。

有人知道我哪里出错了吗?

谢谢。

4

2 回答 2

0

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !^/symfony/web/ -f
RewriteRule ^(.*)$ /symfony/web/$1 

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

</IfModule>
于 2012-08-31T19:30:09.420 回答
0

以下隐藏了对 app.php 的需求,并将所有内容指向正确的公用文件夹。需要注意的一点是,symfony 中的所有公共资源都存储在 /web/bundles 中,而用户在 Web 中直接访问的唯一内容实际上是 app.php。

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_URI} ^/bundles
RewriteRule ^(.*)$ /symfony/web/$1 [L]

RewriteCond %{REQUEST_URI} !^/symfony/web
RewriteRule ^(.*)$ /symfony/web/app.php/$1 [L]

</IfModule>

它首先查找它是否是 /bundles,然后将 symfony/web 预先添加到它并停在那里。否则,它会查找 /symfony/web 是否存在,如果不存在,则在 app.php 前面添加并停止。因为我使用 symfony 在我的 php 代码中生成我的所有 url,所以这不会造成问题。

最好是在所有内容前添加 symfony/web,然后测试它是否是一个文件,如果不是,它会将 app.php 添加到末尾。不幸的是,我无法让它工作。Symfony 在检测到页面不存在时会进行自己的重定向,并且在虚拟主机中只会增加更多复杂性,所以这是我能得到的最好的。

于 2012-09-02T12:58:15.973 回答