symfony 1.4中的路由和模块

symfony 1.4中的路由和模块

问题描述:

我在symfony 1.4中有一个关于路由和环境或模块的严重问题,所以我创建了三个模块前端,移动和后端。symfony 1.4中的路由和模块

所以在前端和移动模块,我使用几乎相同的路由:

//apps/frontend/config/routing.yml 

home: 
url: /home 
param: { module: user, action: home } 

homepage: 
url: /
param: { module: content, action: index } 

    .... 

default_index: 
url: /:module 
param: { action: index } 

default: 
url: /:module/:action/* 

移动模块:

//apps/mobile/config/routing.yml 

home: 
url: /home 
param: { module: user, action: home } 

homepage: 
url: /
param: { module: sfGuardAuth, action: signin } 

    .... 

default_index: 
url: /:module 
param: { action: index } 

default: 
url: /:module/:action/* 

我使用链接来访问我的网站

mysite.com/ ==> frontend module(frontend.php) 
mysite.com/mobile.php ==> mobile module(mobile.php) 

问题是,当我访问手机版登录页面正确,但登录后,他们重定向到h前端模块的页面不到移动模块的主页?

备注:

当我使用这个链接mysite.com/mobile_dev.php与开发ENV移动版本的作品非常好!

编辑:

这里是我的htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC] 
RewriteRule ^(.*) $1? [L] 
</IfModule> 

Options +FollowSymLinks +ExecCGI 

<IfModule mod_rewrite.c> 
RewriteEngine On 

# uncomment the following line, if you are having trouble 
# getting no_script_name to work 
RewriteBase/

# we skip all files with .something 
#RewriteCond %{REQUEST_URI} \..+$ 
#RewriteCond %{REQUEST_URI} !\.html$ 
#RewriteRule .* - [L] 

# we check if the .html version is here (caching) 
RewriteRule ^$ index.html [QSA] 
RewriteRule ^([^.]+)$ $1.html [QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 

# no, so we redirect to our front web controller 
RewriteRule ^(.*)$ index.php [QSA,L] 

</IfModule> 

所以,当我改变index.phpmobile.php链接mysite.com/mobile.php直接进入到移动版网页和一切工作正常...

所以我现在的问题是如何编辑我的.htaccess重定向我这样:

mysite.com/index.php or mysite.com/ redirect me to my site 
mysite.com/mobile.php redirect me to mobile version 

EDIT2:

我解释你,当我开始使用这个链接mysite.com/mobile.php所以它重定向我到移动应用,登录页面,但在登录后,而不是它进入我的主页了新的要求搜索默认的前端控制器,它点在index.php,让我前端应用程序的主页,而不是移动应用程序!

那么为什么symfony与mobile_dev.php一直保持在记忆中,我们在移动开发环境中一直保持着这种状态,mobile.php它在第一次重定向时将我从prod mobile env切换到前端prod env?

+0

你应该检查所有'settings.yml'中是否只有一个['no_script_name:true'](http://symfony.com/legacy/doc/reference/1_4/en/04-Settings#chapter_04_sub_no_script_name) 。 – 1ed 2013-04-25 16:42:04

+1

是在前端和手机他们是no_script_name:在他们所有的settings.yml这两个,这是什么意思? – Nll 2013-04-25 16:50:50

+0

这意味着配置不正确......您应该阅读链接的文档。 – 1ed 2013-04-26 07:24:34

成功登录后,sfGaurdModule重定向到路由homepage。您在两个应用中的homepage路由的网址定义为/。因此,当您登录到frontendmobile时,您将被重定向到http://mysite.com/

由于一个URL只能描述一个资源,因此您的Web服务器在获取URL http://mysite.com/时无法理解您想要使用哪个应用程序。它会查看.htaccess并看到它应该将此URL视为指向http://mysite.com/index.php(前端应用程序)。这就是为什么你总是被重定向到前端。

你可以用.htaccess做任何事情来改变它,因为你将永远无法区分URL http://mysite.com/

你可以做的是:

  • 要么改变主页的URL的移动应用如/mobile_home并切换到no_script_namefalse移动应用

  • 或覆盖sfGuardAuth模块的signin()功能,所以它会重定向到基于您现在使用的应用程序不同的页面。

无论哪种方式,记得设置no_script_namefalse在你的应用程序之一,因为它总是会导致一个问题,如果你不这样做。

至于dev环境。它的工作原理是,在登录dev之后,您不会将其重定向到/,而是将其重定向到frontend_dev.phpmobile_dev.php,这样服务器就不会感到困惑。

+0

我改变no_script_name为假,现在所有的作品,谢谢.. 。 – Nll 2013-04-26 12:39:25

要小心,您不能使用2次no_script_name: true(对于您的前端和移动应用程序),只有一次,如果它在同一个域/子域!

+0

好的,我从手机中删除no_script_name:true,并将其保存在前端,这是dosn't工作我有同样的问题... – Nll 2013-04-25 17:32:08

+0

解决方案不存在,它必须使用htaccess重定向我们,每次我们调用'mobile.php '...... – Nll 2013-04-25 17:38:25

+1

所以我没有看到问题所在。但我不认为你需要编辑.htaccess文件来做到这一点。 – ByUsKev 2013-04-25 17:58:02

你可能想看看relative_url_root,我也有这个问题:Symfony does not detect relative url root

+0

我没有得到您的解决方案,我添加了'RewriteCond%{REQUEST_URI} ^/mobile /? RewriteRule ^(。*)$ mobile.php [QSA,L]'在我的htaccess中,它只能在本地服务器上工作,但在线它不是... – Nll 2013-04-25 19:36:22

如果您使用sfGuardPluginsfDoctrineGuardPlugin你必须检查插件代码来修改重定向行为。科幻1.4有多个应用程序支持不佳。正如你所说,为了说明你已经创建了三个“应用程序”而不是三个“模块”。