2012-12-21 4 views
0

이 질문은 협박으로 보일 수 있습니다. 아니, 간단하지만 철저히 설명했다. 그러니 독서를 계속하십시오.mod_rewrite 및 Codeigniter의 문제 재 작성

내가 다국어 페이지 (영어와 스페인어)를 만들 필요가 나는 노선에 각 언어이 세그먼트를 사용하려면 :/MYCONTROLLER/MyMethod라는

이 엉

내 사이트/은 규칙 I는 htaccess로 그들의 설명했다 :

:

# Rewrite url removing language segment and appending it as a request variable 
RewriteRule ^(es|en)/(.*) $2?lang=$1 [L] 

# Remove index.php from URL 
RewriteCond $1 !^(index.php|css|images|scripts|robots.txt|sitemap.xml) 
RewriteRule ^(.*)$ index.php/$1 [L] 

내가 제대로 안할거야 것이 있습니다제 1 회 규칙은 올바르게 요청 변수 를 사용하여 lang을 생성되지만, URL은 여전히 ​​언어 세그먼트를 제거하지 않고 전달되는 (엔이 |을 ES), 어떤 는 CodeIgniter의가 가정하기 때문에은 (내가 생각하는) 오류 기대할 발생 "en" 또는 "es"이라고하는 컨트롤러. CI 경로에서이 세그먼트를 제거 할 수는 있지만, .htaccess에서이 작업을 수행하고 있기 때문에 다시 반복 할 필요가 없습니다. 지금까지 내가 아는 한이 세그먼트는 다시 작성된 후에 없어야합니다.

: '

  • 내가 돈,

    • 그들은 추가 요청 변수를 기본적으로 작동하지 않습니다 때문에 나는 이러한 이유로이 특정 사건에 대한 CI 경로를 사용하지 않으려는 매개 변수 세그먼트로 요청 변수를 전달하면 요청 된 메소드 또는 다른 방법으로 요청 변수를 전달해야합니다.
    • 생성자 내에서 전에 이것을 처리하고 싶습니다. ($ _GET ('lang')을 검색합니다.)

      예 URL : http://localhost/mysite/en/portfolio

      $ _GET :의 index.php를 입력 할 때이 도움이 이런 경우에

    , 이들은 $ _GET과 $ _SERVER 변수는 덤프 (모든)이다

    Array 
    (
        [lang] => en 
    ) 
    

    $ _SERVER :

    Array 
    (
        [DOCUMENT_ROOT] => C:/xampp/htdocs 
        [CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs 
        [SCRIPT_FILENAME] => C:/xampp/htdocs/mysite/index.php 
        [REDIRECT_QUERY_STRING] => lang=en 
        [REDIRECT_URL] => /mysite/portfolio 
        [REQUEST_METHOD] => GET 
        [QUERY_STRING] => lang=en 
        [REQUEST_URI] => /mysite/en/portfolio 
        [SCRIPT_NAME] => /mysite/index.php 
        [PATH_INFO] => /portfolio 
        [PATH_TRANSLATED] => C:\xampp\htdocs\portfolio 
        [PHP_SELF] => /mysite/index.php/portfolio 
    ) 
    

    언어 세그먼트가없는 동일한 URL이 완벽하게 작동하여 포트폴리오 컨트롤러에 들어갑니다.

    어떤 도움이 가장 환영받을 것입니다.

  • +0

    RewriteRule ^(es|en)/(.*) $2?lang=$1 [L]을 변경하려고하지만? – Muc

    +0

    @Muc : Codeigniter가 컨트롤러와 메서드를 검색하기 위해 요청을 라우팅하는 데 사용하는 것이라면 원하는 것 같습니다. Codeigniter의 기본 동작은 다음과 같습니다. www.site.com/controller/method/param1/param2/ .. –

    답변

    0

    이 코드를 한 번 사용해보십시오 .........

    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php/$1 [L] 
    
    +0

    이렇게하면 데이터를 표시 할 언어를 알기 위해 ** lang ** GET 변수를 얻지 못합니다 . –

    0

    내가 제대로 이해한다면, 당신은 [REQUEST_URI] =>/내 사이트/포트폴리오를 얻으려면, RewriteRule ^(es|en)/(.*) index.php/$2?lang=$1 [L] 내가 CI 정말 익숙하지 않다

    +0

    Hello @swatkins. 제안 된 규칙은 똑같이 작동합니다. 이것은'localhost/mysite/portfolio' 언어 세그먼트로는 작동하지 않지만 local local/mysite/en/portfolio' 언어 세그먼트에서는 작동하지 않습니다. 요청 변수가 생성되었지만 요청 uri는 ** "en"**을 삭제하기 위해 다시 작성되지 않습니다. –