2010-06-09 115 views
0

我有一个项目,在我自己的开发计算机(使用mod_wsgi为项目提供服务)没有问题。在活动服务器(使用mod_fastcgi)它生成500虽然。django内部重定向

我的网址的conf是这样的:

# -*- coding: utf-8 -*- 
from django.conf.urls.defaults import * 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
     url(r'^admin/', include(admin.site.urls)), 
     url(r'^', include('jalka.game.urls')), 
) 

# -*- coding: utf-8 -*- 
from django.conf.urls.defaults import * 

from django.contrib.auth import views as auth_views 

urlpatterns = patterns('jalka.game.views', 
     url(r'^$', 
      view = 'front', 
      name = 'front',), 
     url(r'^ennusta/(?P<game_id>\d+)/$', 
      view = 'ennusta', 
      name = 'ennusta',), 
     url(r'^login/$', 
      auth_views.login, 
      {'template_name': 'game/login.html'}, 
      name='auth_login'), 
     url(r'^logout/$', 
      auth_views.logout, 
      {'template_name': 'game/logout.html'}, 
      name='auth_logout'), 
     url(r'^arvuta/$', 
      view = 'arvuta', 
      name = 'arvuta',),    
) 

和的.htaccess是这样的:

Options +FollowSymLinks 
RewriteEngine on 
RewriteOptions MaxRedirects=10 
# RewriteCond %{HTTP_HOST} . 
RewriteCond %{HTTP_HOST} ^www\.domain\.com 
RewriteRule (.*) http://domain.com/$1 [R=301,L] 

AddHandler fastcgi-script .fcgi 

RewriteCond %{HTTP_HOST} ^jalka\.domain\.com$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*) cgi-bin/fifa2010.fcgi/$1 [QSA,L] 

RewriteCond %{HTTP_HOST} ^subdomain\.otherdomain\.eu$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*) cgi-bin/django.fcgi/$1 [QSA,L] 

注意,我也有其他的项目设置具有相同的.htaccess,并且一个运行得很好,具有更复杂的URL和视图

fifa2010.fcgi:

#!/usr/local/bin/python 
# -*- coding: utf-8 -*- 
import sys, os 

DOMAIN = "domain.com" 
APPNAME = "jalka" 

PREFIX = "/www/apache/domains/www.%s" % (DOMAIN,) 

# Add a custom Python path. 
sys.path.insert(0, os.path.join(PREFIX, "htdocs/django/Django-1.2.1")) 
sys.path.insert(0, os.path.join(PREFIX, "htdocs")) 
sys.path.insert(0, os.path.join(PREFIX, "htdocs/jalka")) 


# Switch to the directory of your project. (Optional.) 
os.chdir(os.path.join(PREFIX, "htdocs", APPNAME)) 

# Set the DJANGO_SETTINGS_MODULE environment variable. 
os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % (APPNAME,) 

from django.core.servers.fastcgi import runfastcgi 
runfastcgi(method="threaded", daemonize="false") 

艾伦

编辑:我增加最大重定向并得到了不同类型的错误:星期三06月09日十五时11分46秒2010] [错误] [客户端84.50。 104.242](63)文件名太长:访问/www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache/domains/www.domain.com/htdocs /cgi-bin/fifa2010.fcgi/jalka/www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache/domains/www.domain.com/htdocs/cgi -bin/fifa2010.fcgi/jalka /网络/阿帕奇/域/ www.domain.com/htdocs中/的cgi-bin/fifa2010.fcgi/jalka /网络/阿帕奇/域/ www.domain.com/htdocs中/的cgi-bin /fifa2010.fcgi /jalka/www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka /www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www /apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache /domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache/domains/www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/www/apache/domains /www.domain.com/htdocs/cgi-bin/fifa2010.fcgi/jalka/失败

它看起来像不断重新回到自己,但至于为什么 - 我不知道。

Edit2-已解决! 最后,当我改变了我的.htaccess这个它开始工作:

RewriteCond %{HTTP_HOST} ^jalka\.domain\.com$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*) /cgi-bin/fifa2010.fcgi [QSA,L] 

RewriteCond %{HTTP_HOST} ^subdomain\.otherdomain\.eu$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*) cgi-bin/django.fcgi/$1 [QSA,L] 

回答

1

这似乎是你的问题:

RewriteCond %{HTTP_HOST} ^jalka\.domain\.com$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*) cgi-bin/fifa2010.fcgi/$1 [QSA,L] 

让我们的请求的例子http://jalka.domain.com/jalka.html如果jalka。 html不存在,您的代码会将您重定向到http://jalka.domain.com/cgi-bin/fifa2010.fcgi/jalka.html。当Apache查找/cgi-bin/fifa2010.fcgi/jalka.html时,它不会找到它,因为fifa2010.fcgi是一个文件,而不是目录。因此,您将被重定向到http://jalka.domain.com/cgi-bin/fifa2010.fcgi/cgi-bin/fifa2010.fcgi/jalka.html。再一次,这个文件找不到。

这就是你如何结束一个文件名太长的错误,因为这个重定向发生了一遍又一遍。

+0

谢谢!你想出了我发现自己的几乎精确的描述 - 我顺便解决了它。我不知道为什么,但是.fcgi文件的这两个重写似乎工作方式不同,因为其中一个是针对子域的,其中域本质上是domain.com的域别名。当我试图设置它完全像为domain.com的子域时,它通过添加子域(jalka)作为请求路径的一部分工作不同。在弄清楚这一点的过程中,我得到像domain.com/cgi-bin/fifa2010.fcgi/jalka/-这些生成的django错误的路径,但至少我知道我正在获取clos – 2010-06-09 16:56:18