我在Python / Flask中创建了一个简单的应用程序,它有一个主页(www.site.com/
)。我已经获得了一个HostGator 共享帐户来托管它,所以我只能访问.htaccess
,但没有其他Apache配置文件。
我设置了一个FastCGI脚本来运行应用程序(these instructions之后),但它们要求URL具有/index.fcgi
或任何其他路径。 我可以直接通过FastCGI脚本提供根路径(/)吗?此外,Apache应该为/static/
和/favicon.ico
等文件夹提供服务。
我现在所拥有的.htaccess
是:
AddHandler fcgid-script .fcgi
DirectoryIndex index.fcgi
RewriteEngine On
RewriteBase /
RewriteRule ^index.fcgi$ - [R=302,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.fcgi/$1 [R=302,L]
我不确定,但我认为Apache版本是2.2。
答案 0 :(得分:3)
仅供参考:您可以使用
检查apache版本apachectl -V # or /<pathwhereapachelives>/apachectl -V
对于fastCGI设置,请查看此链接是否有帮助。 http://redconservatory.com/blog/getting-django-up-and-running-with-hostgator-part-2-enable-fastcgi/
基本上,如果要在/
中运行脚本,可以使用mod_rewrite直接提供静态文件(在下面的示例中为/media
),以及WSGI提供的每个其他路径脚本:
AddHandler fcgid-script .fcgi
Options +FollowSymLinks
RewriteEngine On
RewriteRule (media/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
请注意,在使用Flask时,您必须覆盖SCRIPT_NAME
请求变量(如here所述),否则url_for()
的结果将是一个以字符串开头的字符串/index.fcgi/...
:
#!/usr/bin/python
#: optional path to your local python site-packages folder
import sys
sys.path.insert(0, '<your_local_path>/lib/python2.6/site-packages')
from flup.server.fcgi import WSGIServer
from yourapplication import app
class ScriptNameStripper(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = ''
return self.app(environ, start_response)
app = ScriptNameStripper(app)
if __name__ == '__main__':
WSGIServer(app).run()
答案 1 :(得分:2)
我使用的Apache配置(用于解释每个部分的内容的注释)是:
# Basic starting point
DocumentRoot /path/to/document/root
# Handle static files (anything in /static/ but also robots.txt)
Alias /static /path/to/document/root/static
Alias /robots.txt /path/to/document/root/robots.txt
<Location /robots.txt>
SetHandler default-handler
</Location>
<Location /static>
SetHandler default-handler
</Location>
# Handle the FastCGI program on the root
Alias / /path/to/my_fastcgi_program.fgi/
# Handle FastCGI
<Location />
Options ExecCGI
AddHandler fcgid-script .pl
AddHandler fcgid-script .fcgi
Require all granted
</Location>