2012-03-09 2 views
1

저는 45 분 동안 운이 없었습니다. 비슷한 질문을 찾았지만 내 상황/문제를 완전히 해결 한 것은 없습니다.내부 리디렉션 후에 PATH_INFO가 작동을 멈 춥니 다?

1) 깨끗한 URL 만들기 (index.php 제거) 2) 디렉토리 숨기기 (내 앱은 web_root/dir에 있지만 domain.com에 표시하고 싶습니다.) /) 3) $ _SERVER ('PATH_INFO')는 변경되지 않습니다.

예를 들어, 에서

RewriteBase /dir/ 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/dir.*$ 
# if I change the [L] to an [R], it all works 
# but it obviously "dirties" my desired clean URL 
RewriteRule ^(.*)$ /dir/index.php/$1 [L] 

# not sure why I need this 
RewriteRule ^/?$ /dir/ 

내가해야이 :

www.mydomain.com/dir/index.php/some/path 

이것은 내가 지금까지 무엇을 가지고 :에 다시 내부에

www.mydomain.com/some/path 

: 내가 원하는 내 기관의 프록시가 있지만, 나는 그 문제를 일으키는 것으로 생각하지 않는다.

PHP 5.3 FastCGI를

PATH_INFO 내부 리디렉션 작업을 유지하는 비결은 무엇을 사용하십니까?

답변

0

흠! 후행 경로 물건.

이렇게 경로 정보가 다시 쓰여지고 있습니까?

www.mydomain.com/some/path ->www.mydomain.com/dir/index.php/some/path 디렉토리 별 컨텍스트가 아니라 VirtualHost와 같은 서버 URL 처리의 초기 단계에서 다시 작성해 보셨습니까?

URL에서이 작업을 수행하면 경로 정보가 손실되지 않는다고 생각합니다. 그 시점에서 실제 경로와 후행 정크가 어느 부분인지 모르기 때문입니다. URL이 파일로 매핑되지 않습니다. 당신이 생산한다면

지옥, 간단한 방법에 대해 Alias? 앨리어스 (alias)는 추상 URL 위치를 응용 프로그램 용 파일 시스템의 구체적인 위치에 매핑하는 데 자주 사용됩니다. 나는 그 (것)들의 전체 낱단이있다; 여기에 하나입니다 : 사람들이 www.kylheku.com/cgit/txr에 액세스 할 때이 www.kylheku.com/cgit/cgit.cgi/txr 내부적으로 리디렉션

Alias /cgit/txr /cgit/cgit.cgi/txr 

. 해당 URL도 작동하지만 이전 URL은 문자열 cgi의 세 번 반복이 없기 때문에 더 멋지다.

말할 필요도없이, 별칭은 URL의 후행을 잃지 않습니다.

+0

이렇게하면 제 '별칭'을 다시 검사하게되고 뭔가 "깔끔한"것을 발견하게됩니다. '/ cgit/cgit/cgit.cgi/txr' (저장소마다 다르며 여러 다른 방법으로 그렇게했습니다)의 이유는'/ cgit /'를'/ cgit/cgit.cgi'에 앨리어스하는 대신 '/ cgit/cgit.css'에있는 스타일 시트가 다시 작성되어 발견되지 않습니다. 그러나, 이전의'Alias ​​/cgit/cgit.css/cgit/cgit.css'를 수정하면 해결할 수 있습니다! 앨리어스는 더 많은 별칭 확장을 위해 다시 검사되지 않으므로 사용자가 매핑 한 모든 것이 그대로 남습니다. 그걸 몰랐어! 이제는 cgit에 대한 두 가지 간단한 규칙이 있습니다. – Kaz

+0

Kaz, 훌륭한 아이디어, 별칭과 함께,하지만 전적으로 내 요구에 부합하지 않습니다. /에 물건을 보관하고 싶지만/dir에 파일에 매핑되지 않는 내용을 다시 작성하고 싶습니다 ("기본"사이트의 앱이 있습니다. 다른 사이트의 파일과 별도로 보관하고 싶습니다. 문서 루트. 다른 아이디어? – pocketfullofcheese

관련 문제