2012-08-29 2 views
0

CGI 파일을 내 문서 루트 및 웹 서버로 표시하려고합니다. 나는 서버가 CGI 스크립트를 실행하고 있다는 사실을 드러내고 싶지 않다.index.cgi를 Apache 웹 서버 문서 루트로 리디렉션합니다.

http://host/index.cgi/을 Apache2의 http://host/으로 다시 매핑하려면 어떻게해야합니까? mod-rewrite가 필요하다고 생각하지만 아직 모든 문서를 grokking하지 않았습니다.

다음 구성이 작동,하지만 난 더 완벽한 솔루션이 같은데요 :

RewriteEngine ON 
Redirect /index.cgi/ /

답변

0

mod-rewrite를 사용한 올바른 해결책.

  • URL을 원하는 경로로 다시 쓰는 CGI 스크립트를 업데이트하십시오. 즉, index.cgi/path과 같은 URL은 /app1/path으로 변경되거나 제 경우에는 /path으로 변경됩니다. 내 스크립트에는 글로벌 변경을 수행하는 virutal-root이라는 옵션이있었습니다.

  • 다음 지시어로 아파치를 설치하십시오. 그것이하는 일은 내부적으로 모든 URL을 CGI 스크립트를 포함하도록 재 작성하지만 실제 스크립트로가는 URL은 무시합니다.

    RewriteEngine ON 
    RewriteCond %{REQUEST_URI} !^/index.cgi 
    RewriteRule ^(.*)$   /index.cgi/$1 [PT] 
    
  • 하나 개의 난제는 CGI 스크립트가 서버에 정적 파일을 참조하는 경우, 그들은 재 작성 규칙에서 또한 경로에 배치 할 필요가있다. 그래서 예를 들어, RewriteRule의 전에 다른 경로를 제외 :

    RewriteCond %{REQUST_URI}  !^/_static 
    
1

하지만보다 완벽한 해결책이 같은데요 :

하는 경우가 /index.cgi/에 대한 요청을 /으로 리디렉션하고 싶다면 다른 것을 필요가 없습니다. RewriteEngine On은 mod_rewrite의 일부이며 Redirect 지시문은 mod_alias의 일부입니다. 리디렉션이 작동하려면 다시 쓰기 엔진이 필요하지 않습니다. 또한 이것은 302 리디렉션이며 영구적이지 않습니다. 당신은 아마 거기에 어느 301 또는 permanent 키워드를 포함 할 :

Redirect 301 /index.cgi//

또한, Redirect 지시어는 이렇게 소스에 추가 더 경로가 대상에 추가됩니다, 두 개의 경로가 함께 노드를 연결합니다. 당신이 이동한다면, 위의 주어진 : 당신이 원하지 않는 경우

http://host/some/more/path.txt 

, 당신은 RedirectMatchRedirect을 변경하고 사용할 수 있습니다 :

http://host/index.cgi/some/more/path.txt 

브라우저를 리디렉션 얻을 것이다 정규 표현식 :

RedirectMatch 301 ^/index\.cgi/$/
+0

당신이 URL에서 index.cgi을 숨길 수있는 방법을 알고 있지만, 스크립트에 전달 된 경로 값을 가지고 있습니까? 첫 번째 Redirect를 사용하면 기본 페이지 다음에 스크립트가 중단됩니다. – cmcginty

관련 문제