如何使用mod_rewrite将symfony2与两个URL一起使用

时间:2012-03-22 16:47:05

标签: mod-rewrite symfony

我希望能够使用两个URL访问我的symfony2应用程序,而无需更改服务器配置。我试图通过使用mod_rewrite来实现这一点,在我的情况下,我希望能够在http://example.com/http://example.com/test/访问我的应用程序

.htaccess文件如下所示:

RewriteEngine On
RewriteRule ^test/(.*)$ $1 [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]   

我在symfony2手册中添加了第2行,第3行和第4行。响应是来自symfony的404。现在我的问题是:

1)是否可以使用mod_rewrite执行此操作?
2)如果没有,那么最好的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

一个选项似乎是创建一个名为“test”的文件夹,并为其提供自己的app_dev.php和.htaccess副本

您可能需要调整最后一行。默认的.htaccess文件不使用%{DOCUMENT_ROOT},但我的设置需要它。

RewriteEngine On
RewriteOptions Inherit
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/test/app_dev.php [QSA,L]

然后你需要编辑test / app_dev.php以在require语句中添加额外的“../”。

对我的一个项目进行快速测试表明这似乎有效。

更新

我不相信只使用重写规则就可以实现这一点。这是我尝试修改我的web / .htaccess文件。我的理解是,如果你请求/ test / foo,则URL被重写为内部变为/app_dev.php/foo。然而,Symfony找到它试图以某种方式路由的URL的方式总是发现URL是/ test / foo并且我得到路由未找到异常。

RewriteEngine On
RewriteOptions Inherit

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^test/(.*)$ %{DOCUMENT_ROOT}/app_dev.php/$1 [QSA,L]

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

如果我添加更改我的app_dev.php行以使用[QSA,L,R = 301]它会将浏览器重定向到/app_dev.php/foo并给我预定的页面。由于它不会隐藏app_dev.php,它可能不是您正在寻找的,但它会验证匹配是否正常。