Джанго внутренние перенаправления - PullRequest
0 голосов
/ 09 июня 2010

У меня есть один проект, который на моем собственном компьютере разработчика (использует mod_wsgi для обслуживания проекта) не вызвал проблем. На живом сервере (использует mod_fastcgi) он генерирует 500, хотя.

мой URL-адрес выглядит так:

# -*- 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")

Alan

РЕДАКТИРОВАТЬ: я увеличил максимальное количество перенаправлений и получил различные виды ошибок: [ср. 9 июня 15: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/apache/domains/www .domain.com / HTDOCS / CGI-BIN / fifa2010.fcgi / Jalka / WWW / Apache / домены / www.domain.com / HTDOCS / CGI-BIN / fifa2010.fcgi / Jalka / WWW / Apache / домены / www.domain .com / HTDOCS / CGI-BIN / fifa2010.fcgi / Jalka / WWW / Apache / домены / www.domain.com / HTDOCS / CGI-BIN / fifa2010.fcgi / Jalka / WWW / Apache / домены / 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/ap AChE / домены / www.domain.com / HTDOCS / CGI-BIN / fifa2010.fcgi / Jalka / WWW / Apache / домены / www.domain.com / HTDOCS / CGI-BIN / fifa2010.fcgi / Jalka / WWW / Apache / домены / 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 Ответ

1 голос
/ 09 июня 2010

Кажется, это ваша проблема:

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. И снова этот файл не может быть найден.

Это то, как вы получаете слишком длинную ошибку с именем файла, потому что это перенаправление происходит снова и снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...