2010-06-09 55 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