2013-04-25 87 views
1

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

回答

1

成功登錄後,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

0

要小心,您不能使用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

0

你可能想看看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

0

如果您使用sfGuardPluginsfDoctrineGuardPlugin你必須檢查插件代碼來修改重定向行爲。科幻1.4有多個應用程序支持不佳。正如你所說,爲了說明你已經創建了三個「應用程序」而不是三個「模塊」。