1

我在 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)

问题是当我正确访问移动版本以登录页面但登录后他们将我重定向到前端模块的主页而不是移动模块的主页?

评论 :

当我将此链接mysite.com/mobile_dev.php与 dev 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.phpmysite.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

编辑2:

我向你解释一下,当我从这个链接开始时,mysite.com/mobile.php它会将我重定向到移动应用程序以登录页面,但是当登录后它转到我的主页时,新请求搜索默认前端控制器并指向 index.php 以便给我主页前端应用程序而不是移动应用程序!

那么为什么 symfonymobile_dev.php会一直记住我们在移动开发环境中,并mobile.php在第一次重定向时将我从产品移动环境切换到前端产品环境?

4

4 回答 4

1

登录成功后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 更改为 eg/mobile_home并切换no_script_namefalse移动应用程序

  • 或覆盖模块的signin()功能,sfGuardAuth使其根据您现在使用的应用程序重定向到不同的页面。

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

至于dev环境。它之所以有效,是因为在 dev 中登录后,您永远不会被重定向到,/但无论是到frontend_dev.php还是mobile_dev.php服务器都不会感到困惑。

于 2013-04-26T08:29:49.410 回答
0

If you're using sfGuardPlugin or sfDoctrineGuardPlugin you have to check the plugin code to modify the redirect behavior. sf 1.4 have poor multiple app support. And just to clarify you have created three "apps" not three "modules", as you said.

于 2013-04-25T22:38:31.097 回答
0

请注意,您不能使用 2 次no_script_name: true(对于您的前端和移动应用程序),如果它位于同一个域/子域上,则只能使用一次!

于 2013-04-25T17:27:51.400 回答
0

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

于 2013-04-25T18:37:06.630 回答