如果我浏览我的网站,就会出现 500“内部服务器错误”。但是,如果我通过 SSH 进入我的服务器并转到我的网站文件夹并运行“python mysite.fcgi”,我会看到 HTML 呈现正常。显然,有些地方出了问题,但我不确定是什么问题。
这是我的.htaccess 文件:
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(static/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]
这是我的 mysite.fcgi 文件:
#!/usr/bin/python2.5
import sys, os
sys.path.insert(0, "/kunden/homepages/34/[mydir]/htdocs/projects/django")
sys.path.insert(1, "/kunden/homepages/34/[mydir]/lib/python/site-packages")
os.chdir("/kunden/homepages/34/[mydir]/htdocs/projects/django/mysite")
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(["method=threaded", "daemonize=false"])
我正在 1and1 上进行设置。这很麻烦,但我认为我已经接近目标了。
答案1
对于 CGI,500 服务器错误通常是由于 CGI 在 HTML 代码之前输出了错误的标头数据而导致的。您应该在 html 开始之前输出内容类型和两个回车符“\n”。 任何意外的输出将导致 500 错误。
我不是 Python 爱好者所以这里有一个 Perl 示例。;-)
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
您可能可以在服务器日志中找到确切原因。看到 500 错误时,请务必先检查那里。
答案2
尝试:
os.environ['PYTHON_EGG_CACHE'] = '/path/to/writeable/folder'
然后对该文件夹执行 chmod 777。
如果您可以将其作为 ssh 运行,并且 apache 作为 www-data(或除您之外的某些 UID)运行,则它可能正在尝试写入 eggcache 并被拒绝权限。
答案3
AddHandler fastcgi-script .fcgi
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +FollowSymLinks +ExecCGI
</Files>
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /mysite.fcgi/$1 [QSA,L]