2009-12-09 2 views
1
내가 (URL 매개 변수를 허용하는) PATH_INFO에 AUTO에서 $config['uri_protocol']을 변경해야

내 문제 : 나는 설정하면 $config['uri_protocol']="PATH_INFO"; 정규 URL이 작동 중지하고 나는 더 홈페이지를 얻을 수 어떤 사이트 페이지 URL을 클릭했는지 확인하십시오.

print_r ($ _SERVER)은 내가 추가하는 URL 매개 변수가 다른 $ _SERVER 부분이 아닌 REQUEST_URI에만 표시된다는 것을 보여줍니다.

내가 RewriteRule ^(.*)$ index.php?/$1 [QSA,L]

RewriteRule ^(.*)$ index.php?/$1 [L] 

을 변경 URL PARAMS 통과 할 수 있도록 :

내 htaccess로는 standard one

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # This is different between local host and production server!!! 
    RewriteBase/


    #Removes access to the system folder by users. 
    #Additionally this will allow you to create a System.php controller, 
    #previously this would not have been possible. 
    #'system' can be replaced if you have renamed your system folder. 
    RewriteCond %{REQUEST_URI} ^system.* 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 

    #Checks to see if the user is attempting to access a valid file, 
    #such as an image or css document, if this isn't true it sends the 
    #request to index.php 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php?/$1 [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
    # If we don't have mod_rewrite installed, all 404's 
    # can be sent to index.php, and everything works as normal. 
    # Submitted by: ElliotHaughin 

    ErrorDocument 404 /index.php 
</IfModule> 

업데이트입니다. 이제 url 매개 변수도

$_SERVER 

REDIRECT_QUERY_STRING, QUERY_STRING AND REQUEST_URI 

에 표시됩니다.

문제 : 위의 모든 옵션을 사용하여 $ config [ 'uri_protocol']을 시도했지만 URL 매개 변수를 추가 할 때마다 CI가 오류 404를 표시합니다.

참고 : 위의 2 개의 서버를 사용해 보았습니다. 그 중 하나는 centos5/Apache2/Plesk VPS이고 다른 하나는 xampp/Vista입니다.

답변

0
+0

안녕하세요. Google에서이 질문을 발견했습니다. 나는 당신이 여기에서 묘사 한 것과 정확히 똑같은 문제를 겪고 있습니다. URL 쿼리 문자열을 사용해야하지만 쿼리 문자열을 작동시키는 데 필요한 $ config [ 'uri_protocol']을 "PATH_INFO"로 변경하면 모든 페이지가 홈 페이지로 리디렉션됩니다. 여기에서 제공 한 링크를 따라 갔지만 솔루션을 이해하지 못했습니다 (그리고 나에게 적합하지 않은 것 같습니다). $ config [ 'uri_protocol']에 무엇을 설정했는지, 그리고 .htaccess의 모습을 지금 물어볼 수 있습니까? 고마워요. :) –

+0

죄송합니다. 해결책을 찾아 냈습니다 (해킹 해킹 : P). 내 호스트 (어떤 이유로) PATH_INFO 변수를 허용하지 않습니다. 그래서 ORIG_PATH_INFO 값을 PATH_INFO 변수에 복사했습니다. Et voila! –

+0

$ _SERVER [ 'PATH_INFO'] = $ _SERVER [ 'ORIG_PATH_INFO']; 좋은 작품 –

1

mod_rewrite의 마지막 규칙에서 [QSA] 옵션을 사용해야합니다 ... 이것은 '?'다음에 오는 쿼리 문자열 인수를 최종 URL에 추가합니다.

규칙은 다음과 같이 종료 :

귀하의 요청이
RewriteRule ^(.*)$ index.php?baseurl=$1 [QSA,L] 

경우 결국

http://yourhost.com/module/action?param1=value1&param2=value2 

, 당신은 얻을 : 나는 그것을 테스트하지 않았습니다

http://yourhost.com/index.php?baseurl=/module/action&param1=value1&param2=value2 

. 그것은 당신이 정말로 원하는 것입니까?

는 PATH_INFO에 $ 설정 [ 'uri_protocol를'] 설정하지 않는 경우
+0

안녕하세요, Arno, 팁 주셔서 감사합니다. 문제가 완전히 해결되지 않았으므로 원래 질문의 업데이트를 참조하십시오. – Nir

+0

"?"사이의 후행 슬래시를 제거하려고 시도 했습니까? 및 "$ 1"? – Arno

1

. var_dump ($ _ SERVER) 어딘가에 당신이 원하는 경로를 포함하는 변수를 찾은 다음 AUTO가 작동하지 않으면 그것을 설정하십시오.

3

동일한 문제가 있었는데 uri_protocol을 PATH_INFO으로 설정하면 내 사이트의 모든 링크가 기본 컨트롤러 & 동작으로 변경됩니다.그럼 난 내 서버가 PATH_INO 변수를 지원하지 않는 것을 발견, 그래서 문제 해결 config.php에서 두 단계를했다 :

첫째 : 다음

$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO']; 

:

$config['uri_protocol'] = 'PATH_INFO'; 

위의 두 선이 내 문제를 해결합니다.

+0

감사합니다 이것 저에게 많은 시간을 절약! –

+0

감사합니다. 현재 작동 중입니다. 그리고 이것은 Cpanel의 잘못입니다! –

1

가장 좋은 방법은 서버에서 가져 오는 매개 변수를 확인하는 것입니다.

$_SERVER['PATH_INFO']이 표시되면 다음을 사용하십시오. 당신이 $_SERVER['ORIG_PATH_INFO']을 얻고있는 경우

$config['uri_protocol'] = 'PATH_INFO'; 

그렇지 않으면,이 사용

$config['uri_protocol'] = 'ORIG_PATH_INFO'; 

는 설정 파일의 변경 사항을 확인합니다.