如何在根URL中运行FastCGI脚本(/ - 没有路径)?

时间:2016-04-04 14:30:27

标签: apache .htaccess fastcgi

我在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。

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>