2013-04-25 2 views
1

symfony 1.4에서 라우팅 및 envirenement 또는 모듈에 관한 심각한 문제가있어서 프런트 엔드, 모바일 및 백엔드의 세 가지 모듈을 만들었습니다. 프론트 엔드 및 모바일 모듈 그래서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로 리디렉션 할 때입니다. 프론트 엔드 모듈의 omepage는 모바일 모듈의 홈 페이지가 아닌가?

비고 : 내가 dev에 ENV와이 링크 mysite.com/mobile_dev.php를 사용할 때

모바일 버전은 매우 잘 작동!

편집 : 여기

내 htaccess로이다 : 그래서 mobile.phpmysite.com/mobile.php 모바일 버전 홈페이지에 직접 가서 모두가 잘 작동 링크를 index.php을 변경할 때

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

...

이제 내 문제는 내 .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에서 프론트 엔드 앱의 홈페이지를 모바일 앱이 아닌 내게 알려주세요!

mobile_dev.php의 symfony가 우리가 모바일 dev env에 항상 머물러 있고 mobile.php으로 이동하면 모바일 모바일 환경에서 프런트 엔드 환경으로 첫 번째 리디렉션으로 전환됩니까?

+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

+1

프론트 엔드와 모바일에서 네, 그들은 no_script_name입니다 : 그들 모두 안에있는 모든 설정. – Nll

+0

이것은 잘못된 구성을 의미합니다 ... 링크 된 문서를 읽어야합니다. – 1ed

답변

1

로그인 성공 후 sfGaurdModule은 homepage 경로로 리디렉션됩니다. 두 앱의 homepage 경로에는 /으로 정의 된 URL이 있습니다.따라서 frontend 또는 mobile에 로그인하면 http://mysite.com/으로 리디렉션됩니다.

하나의 URL은 하나의 리소스 만 설명 할 수 있으므로 URL이 http://mysite.com/ 일 때 사용하려는 응용 프로그램을 웹 서버가 이해할 수있는 방법이 없습니다. .htaccess를보고이 URL을 http://mysite.com/index.php (프론트 엔드 응용 프로그램)을 참조하는 URL로 취급해야합니다. 그래서 항상 프론트 엔드로 리디렉션됩니다.

http://mysite.com/ URL을 구분할 수 없으므로 .htaccess로 변경할 수있는 방법이 없습니다.

당신이 할 수있는 것은 :

  • 하나가 예를 들어, 모바일 앱 홈페이지의 URL을 변경 /mobile_home 및 모바일 앱

  • 에 대한 falseno_script_name를 전환하거나 당신이 지금 사용하는 응용 프로그램에 따라 다른 페이지로 리디렉션됩니다 있도록 sfGuardAuth 모듈의 signin() 기능을 덮어 씁니다.

어느 쪽이든은이 작업을 수행하지 않는 경우 항상 문제의 원인이됩니다 귀하의 애플 리케이션 중 하나에 falseno_script_name를 설정해야합니다.

환경은 dev입니다. dev에 로그인 한 후에는 /으로 리디렉션되지 않지만 frontend_dev.php 또는 mobile_dev.php으로 리다이렉트되므로 서버가 혼동하지 않기 때문에 작동합니다.

+0

no_script_name을 false로 변경하면 모든 것이 작동합니다. . – Nll

0

동일한 도메인/하위 도메인에있는 경우 no_script_name: true (프론트 엔드 및 모바일 앱용)의 2 회만 사용할 수 있습니다.

+0

좋아요. no_script_name을 제거합니다. 모바일에서 true를 유지하고 프론트 엔드에 그대로두면 동일한 문제가 발생합니다 ... – Nll

+0

솔루션이 없기 때문에 htaccess를 사용하여 'mobile.php'를 호출 할 때마다 리디렉션해야합니다. '.... – Nll

+1

그래서 문제가 무엇인지 모르겠습니다. 그러나 이것을하기 위해 .htaccess 파일을 편집 할 필요가 없다고 생각합니다. – ByUsKev

0

relative_url_root을보고 싶을 수도 있습니다.이 문제에 대해서는 Symfony does not detect relative url root도 있습니다.

+0

해결책을 얻지 못했습니다. 'RewriteCond % {REQUEST_URI} ^/mobile /? 내 htaccess에서 RewriteRule^(. *) $ mobile.php [QSA, L]'및 로컬 서버에서만 작동하지만 온라인에서는 그렇지 않습니다. – Nll

0

당신이 sfGuardPlugin 또는 sfDoctrineGuardPlugin를 사용하는 경우에는 리디렉션 동작을 수정하는 플러그인 코드를 확인해야합니다. sf 1.4가 여러 개의 앱을 지원하지 않습니다. 그리고 당신이 말했듯이 3 개의 "모듈"이 아닌 3 개의 "apps"을 만들었습니다.