Mod Rewrite执行多个编辑

时间:2012-08-31 11:58:22

标签: apache symfony

我在共享服务器上使用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。我尝试了各种标签的各种组合,我得出结论,他们只是一次性运行,这与我在互联网上看到的相反。官方文档实例很少,并没有回答我的问题。

任何人都有任何想法我错了?

感谢。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

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

最好是,它会在所有内容之前看到symfony / web,然后测试它是否是一个文件,如果不是,它会将app.php添加到最后。不幸的是,我无法让它发挥作用。 Symfony在检测到页面不存在时会自行重定向,并且在vhost中只增加了更多的复杂性,所以这就像我能得到它一样好。