2011-07-05 6 views
0

내 프로젝트는 오래된 정적 사이트를 동적 사이트로 만드는 것입니다. 이전 사이트에는 약 40 페이지가 있습니다.htaccess redirection

새로운 형식은 현재 2 개 언어로 제공 될 예정이며 향후 더 많은 가능성이 있습니다.

  1. 기본적인 것들 : 실제로 URL을 2 개 세트 있습니다

    /index.html를, /about.html는

  2. 나머지 /contact.html : /folder1/page1.html/

    1. 일 : 폴더 1/page2.html, /folder3/page3.html 등

    클라이언트는 기본과 동일한 패턴을 가지고 제 2 언어를 원한다 전자 기본적인 것들 :/언어 /index.html를,/언어 /about.html/언어 /contact.html

  3. 나머지 : /language/folder1/page1.html/언어/폴더 1/page2.html, /language/folder3/page3.html 등

내가 htaccess로와 함께 다시 작성할 수 있습니다 기본 페이지 : 내가 끼 었어 페이지의 나머지 부분에 관해서는

# default language  
RewriteRule ^about.html$ about.php?language= [NC,L] 
#other language 
RewriteRule ^([^/]+)/about.html$ about.php?language=$1 [NC,L] 

가.

내 데이터베이스에 기존 URL과 해당 콘텐츠를 저장했습니다. 예를 들어

, 기본 언어 :

/folder1/page1.html이 dynamicpage1.php 언어 = & URL =/폴더 1/page1.html

/Folder2 폴더/페이지 2에 의해 제공됩니다. HTML이 dynamicpage1.php? 언어 = & URL로 제공됩니다 =/Folder2 폴더/page2.html

/folder3/page3.html dynamicpage2.php? 언어로 제공됩니다 = & URL =/FOLDER3/page3.html

그리고 다른 언어 :

/([^/]+)/folder1/page1.html이 dynamicpage1.php에 의해 제공됩니다

언어 = $ (1) & URL =/폴더 1/page1.html

/([^ /] +)/Folder2와/page2.html dynamicpage1.php 의해 제공 될 것인가? $ 1 언어 = & URL =/Folder2와/page2.html

/([^ /] +)/FOLDER3/PAGE3. html은 dynamicpage2.php? language = $ 1에 의해 게재됩니다. & url =/folder3/page3.html

어떻게 규칙을 구성 할 수 있습니까?

는 내가하려고하면 : (. *)? RewriteRule의이^([^은 /] +)/$의 subservices.php 언어 = $ (1) & URL = $ 2, 그것은

+0

1) "실패"란 무엇을 의미합니까? 2)'subservices.php' 스크립트는 무엇을합니까? - 나는 동적 페이지를 실행할 것인지 결정할 것입니다. – LazyOne

답변

1

실패 당신은 더 나은 지정/목록 URL에서 가능한 언어 재 작성 규칙 - 그러면 훨씬 더 정확해질 것입니다.이 규칙은 잘 작동 : 당신이 사용합니까 어떤 언어로

RewriteRule ^((EN|FR)/)?(.*\.html)$ /subservices.php?language=$2&url=/$3 [NC,QSA,L] 

또는

RewriteRule ^((english|french)/)?(.*\.html)$ /subservices.php?language=$2&url=/$3 [NC,QSA,L] 

변경 EN|FR을.

  • /index.html가 ZZ (/subservices.php?language=&url=/ZZ/folder1/page1.html 재기록한다 /subservices.php?language=FR&url=/folder1/page1.html
  • /ZZ/folder1/page1.html 재기록한다 /subservices.php?language=&url=/folder1/page1.html
  • /FR/folder1/page1.html 재기록한다 /subservices.php?language=FR&url=/index.html
  • /folder1/page1.html 재기록한다 /subservices.php?language=&url=/index.html
  • /FR/index.html 재기록 될 허용되는 언어로 인식되지 않음).
+0

나는 당신의 코드를 시험해 보았지만 EN | FR 대신에 영어를 사용했는데 프랑스어는 500이었습니다. 이것은 EN에만 적용됩니다. – andrew

+0

나는 작은 실수를했다. (나는 쓸모없는'[]'을 사용했다.) 규칙을 다시 확인하고 내 PC에서 테스트하여 잘 작동한다. – LazyOne

+0

ok 나는 50 %이다. RewriteRule^((영어) | french) /)? (. * \. html로) $ /subservices.php?language=$2&url=/$3 [NC, QSA, L]는 이/프랑스어/디렉토리 을 위해 작동하지만 영어로 나는 500 내부 서버 오류 를 얻을 수 나는이 규칙과 충돌하는 다른 규칙을 추측한다. 디버깅을 시도하고 무엇을 찾을 수 있는지 보게 될 것이다. – andrew