2012-04-02 5 views
9

공유 호스팅 환경에서 Python CGI를 실행하고 싶습니다. 나는 플라스크의 예를 따라 아래와 같이 작은 응용 프로그램을 함께했다 :Flask의 경로 라우팅

Options +ExecCGI 
AddHandler cgi-script .cgi .py .rb 
DirectoryIndex index.cgi index.htm 

그리고 내 index.cgi 성공적으로의 경로 / 매핑

#!/usr/bin/env python 
from wsgiref.handlers import CGIHandler 
from firstflask import app 

CGIHandler().run(app) 

입니다 :

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

@app.route("/pi") 
def pi(): 
    return "3.1416" 

if __name__ == "__main__": 
    app.run() 

.htaccess 포함 index(), 그러나 경로 /pipi()으로 매핑하는 대신 실패했습니다. 404 오류가 발생했습니다. 나는 명백한 것을 놓친다 고 생각한다. 도와 주셔서 감사합니다.

+0

Apache와 호환됩니까? 나는 아파치 태그를 추가하는 것이 웹 서버 설정 문제가 더 많은 것 같기 때문에 더 많은 해답을 줄 것이라고 생각한다. – six8

+0

호스트가 CGI 만 지원합니까, 아니면 mod_python 또는 mod_wsgi를 지원합니까? 그보다 훨씬 더 나은 선택입니다. – six8

+0

Cixate,이게 아파치와 맞습니다. 나는 파이썬 웹 프레임 워크에 익숙하지 않다. CGI 설정은 mod-wsgi 설정보다 빠릅니다. 그것이 내가 cgi를 선택하는 이유입니다. 또 다른 한가지는 url-rewrite가 필요하다고 생각했습니다. 그러나 문서에서 언급 한 URL 재 작성을 보지 못했기 때문에 필요가 없다고 가정합니다. 감사합니다 – sdc

답변

2

cgi와 wsgi에 대한 의견은 유효하지만 cgi 설정을 실제로 사용하려면 index.cgi 대신 "/"이외의 URL을 캐치하기 위해 다시 쓰기 규칙이 필요합니다. 설치 프로그램을 사용하면 기본적으로 색인 파일이 index.cgi라고하지만, 경로에 다른 것이 있으면 index.cgi가 실행되지 않습니다. 이것이/pi 요청에 대해 404 찾을 수 없음을 얻는 이유입니다.

url /index.cgi/pi를 요청하여 pi() 함수에 액세스 할 수 있습니다. 그러면 성공적으로 3.1416이 렌더링되지만 분명히 매우 좋은 URL이 아닙니다. 이는 재 작성을 위해 구성해야하는 것에 대한 힌트를 제공합니다. 모든 요청을 /로 /index.cgi/로 다시 작성하십시오. 이는 원래 구성과 함께 매우 간단한 다시 쓰기 규칙을 제공합니다.

Options +ExecCGI 
AddHandler cgi-script .cgi .py .rb 
DirectoryIndex index.cgi index.htm 

RewriteEngine On 
RewriteRule ^index.cgi/(.*)$ - [S=1] 
RewriteRule ^(.*)$ index.cgi/$1 [QSA,L] 
0

위의 해결 방법으로 쿼리가 해결되었는지 확실하지 않습니다.

은 내가 .htaccess 파일이 있어야합니다 생각 :

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /path/to/the/application.cgi/$1 [L] 

그것은이 완벽하게 작동합니다. 나는 내 코드를 테스트했다.

참고 - here

관련 문제