Python 为什么django在hostgator服务器上使用fcgi会出现这种情况?

Python 为什么django在hostgator服务器上使用fcgi会出现这种情况?,python,django,fastcgi,Python,Django,Fastcgi,我试图在hostgator上部署一个简单的静态站点。我遵循了这一点,最初在我的.htaccess中(其中abc.com是网站): 但这不起作用,并且由于某种原因,只能从我的模板目录加载“home.html”。当我尝试跟踪任何链接时,我会得到一个hostgator 404错误页面。然后,在做了一些研究并与hostgator支持人员交谈了几次之后,我将其更改为更简单的: AddHandler fcgid-script .fcgi RewriteEngine On RewriteCond %{RE

我试图在hostgator上部署一个简单的静态站点。我遵循了这一点,最初在我的.htaccess中(其中abc.com是网站):

但这不起作用,并且由于某种原因,只能从我的模板目录加载“home.html”。当我尝试跟踪任何链接时,我会得到一个hostgator 404错误页面。然后,在做了一些研究并与hostgator支持人员交谈了几次之后,我将其更改为更简单的:

AddHandler fcgid-script .fcgi

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]
public_html目录中的My index.fcgi文件如下所示:

#!/usr/local/bin/python
import sys, os, user
from django.core.servers.fastcgi import runfastcgi

sys.path.insert(0, "/usr/lib/python2.6")
sys.path.insert(0, "/home/joeshmo/django")
sys.path.insert(0, "/home/joeshmo/django/Projects")
sys.path.insert(0, "/home/joeshmo/django/Projects/PersonalWebsite")

# Switch to the directory of your project.
os.chdir("home/joeshmo/django/Projects/PersonalWebsite/")

# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "PersonalWebsite.settings"

runfastcgi(method="threaded", daemonize="false")

这很有效,但现在我很好奇这里发生了什么。尽管我自己做了一些研究,但我还是对fcgi的功能感到困惑,更重要的是,它是如何告诉django从我的模板目录加载正确的html文件的,因为与我交谈的hostgator技术人员向我保证html文件只能从public_html文件夹访问。我熟悉url调度程序、regexp、视图等的一般概念,但我是自学成才的web开发人员,所以请记住这一点

听起来您可能已经习惯了像PHP项目这样的东西,其中URL和服务器上的路径之间有1:1的对应关系。Django项目并非如此:您将希望的请求路径传递给一个脚本(通常是WSGI脚本,但在您的例子中是FCGI),该脚本知道将路径传递给Django代码。一旦路径到达Django代码,它就会在url.py文件中查找匹配的路径模式,如果找到了,就会返回。路径是在.htaccess文件中的
$1
变量中发送的,这就是为什么在传递文本字符串“home.html”而不是实际请求路径时,您只看到主模板的原因


其他一切正常吗?我曾经被迫通过FCGI在HostGator上主持一个Django项目,所以我知道设置它的痛苦。如果还有其他问题,我可能会回忆起一些可怕的记忆,但我强烈建议您看看是否可以继续使用Django(我很高兴WebFaction提供了一个安装程序,使通过WSGI设置Django变得更容易)。

是的,这确实令人沮丧,我之所以反应迟钝,一个原因是因为我快要发疯了,所以我不得不花点时间来做这件事。我正要换主机。首先,我很愚蠢,没有做更多的研究就进入了hostgator,我已经厌倦了在stackoverflow上孤独地为答案祈祷(尽管你的答案很受欢迎,我认为增加对fcgi的知识无论如何都不会浪费)不用担心,我经历了一段艰难的时光,那时仍然有人在FastCGI上运行Django。那些日子已经过去了,所以现在很难找到支持。如果您需要更多帮助,请回答这个问题。嗨,Tom,我刚刚问了另一个关于静态文件管理的问题,在过渡到webfaction之后,我将非常感谢您的任何意见:
#!/usr/local/bin/python
import sys, os, user
from django.core.servers.fastcgi import runfastcgi

sys.path.insert(0, "/usr/lib/python2.6")
sys.path.insert(0, "/home/joeshmo/django")
sys.path.insert(0, "/home/joeshmo/django/Projects")
sys.path.insert(0, "/home/joeshmo/django/Projects/PersonalWebsite")

# Switch to the directory of your project.
os.chdir("home/joeshmo/django/Projects/PersonalWebsite/")

# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = "PersonalWebsite.settings"

runfastcgi(method="threaded", daemonize="false")