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.php
到mobile.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?
成功登录后,sfGaurdModule重定向到路由homepage
。您在两个应用中的homepage
路由的网址定义为/
。因此,当您登录到frontend
或mobile
时,您将被重定向到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_name
为false
移动应用或覆盖
sfGuardAuth
模块的signin()
功能,所以它会重定向到基于您现在使用的应用程序不同的页面。
无论哪种方式,记得设置no_script_name
到false
在你的应用程序之一,因为它总是会导致一个问题,如果你不这样做。
至于dev
环境。它的工作原理是,在登录dev之后,您不会将其重定向到/
,而是将其重定向到frontend_dev.php
或mobile_dev.php
,这样服务器就不会感到困惑。
我改变no_script_name为假,现在所有的作品,谢谢.. 。 – Nll 2013-04-26 12:39:25
要小心,您不能使用2次no_script_name: true
(对于您的前端和移动应用程序),只有一次,如果它在同一个域/子域!
你可能想看看relative_url_root
,我也有这个问题:Symfony does not detect relative url root。
我没有得到您的解决方案,我添加了'RewriteCond%{REQUEST_URI} ^/mobile /? RewriteRule ^(。*)$ mobile.php [QSA,L]'在我的htaccess中,它只能在本地服务器上工作,但在线它不是... – Nll 2013-04-25 19:36:22
如果您使用sfGuardPlugin或sfDoctrineGuardPlugin你必须检查插件代码来修改重定向行为。科幻1.4有多个应用程序支持不佳。正如你所说,为了说明你已经创建了三个“应用程序”而不是三个“模块”。
你应该检查所有'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
是在前端和手机他们是no_script_name:在他们所有的settings.yml这两个,这是什么意思? – Nll 2013-04-25 16:50:50
这意味着配置不正确......您应该阅读链接的文档。 – 1ed 2013-04-26 07:24:34