2009-09-23 13 views
10

Poniżej znajdują się odpowiednie pliki konfiguracyjne, również pod adresem http://dpaste.com/97213/.Uruchom Django z prefiksem URL ("podkatalog") - aplikacja działa, ale adresy URL są zepsute?

Konfiguracja apache działa, ponieważ dostęp do "example.com/" pokazuje plik index.html, który umieściłem w katalogu głównym dokumentu.

Chciałbym podawać Django/aplikacje pod przedrostkiem "/ d", więc "example.com/d/" załaduje domyślną aplikację, "example.com/d/app3" załaduje inną, ponieważ skonfigurowane w urls.py.

Obsługa Django, korzystam z sugerowanego mod_wsgi na Linuksie.

Obecnie mogę uzyskać dostęp do aplikacji Bilet na stronie 'example.com/d', ale kiedy @login_required decorator próbuje wysłać mnie na stronę logowania, wysyłam wiadomość na adres "example.com/accounts/login", zamiast oczekiwanego "example.com/d/accounts/login".

Ponieważ domyślnie aplikacja ładuje się poprawnie, nie jestem pewien, co robię tutaj I am, lub jeśli jest to błąd w Django podczas generowania adresów URL.

Wszelkie sugestie?

EDIT: Na marginesie, jeśli zmienię linię apache config: WSGIScriptAlias ​​/ d /home/blah/django_projects/Tickets/apache/django.wsgi do WSGIScriptAlias ​​//home/bla/django_projects /Tickets/apache/django.wsgi Aplikacja, komentowanie i logowanie wszystko działa dobrze. Nawet przejście do "example.com/admin" spowoduje załadowanie administratora, chociaż media administracyjne zostały zerwane, więc nie są ładowane żadne arkusze stylów.

--- Configs następująco:

# 
# /home/blah/django_projects/Ticket/urls.py 
# 
from django.conf.urls.defaults import * 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    (r'^', include('ticket.urls')), 
    (r'^admin/', include(admin.site.urls)), 
    (r'^comments/', include('django.contrib.comments.urls')), 
) 


# 
# /home/blah/django_projects/Ticket/apache/django.wsgi 
# 
import os, sys 

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..') 

sys.path.append('/home/blah/django_projects') 
sys.path.append('/home/blah/django_projects/Tickets') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'Tickets.settings' 

import django.core.handlers.wsgi 

application = django.core.handlers.wsgi.WSGIHandler() 


# 
# /etc/apache2/sites-available/django_tickets_wsgi (apache conf) 
# 
NameVirtualHost * 
<VirtualHost *> 

    Alias /media /home/blah/django_projects/Tickets/media 


    WSGIScriptAlias /d /home/blah/django_projects/Tickets/apache/django.wsgi 
    WSGIDaemonProcess exmaple_com user=blah group=blah processes=1 threads=10 
    WSGIProcessGroup example_com 

    ServerAdmin [email protected] 
    ServerName example.com 

    DocumentRoot /var/www/ 

    <Directory /var/www/> 
     Options -Indexes FollowSymLinks -MultiViews -Includes 
     AllowOverride None 
     Order allow,deny 
     allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog /var/log/apache2/access.log combined 
    ServerSignature Off 

</VirtualHost> 

Odpowiedz

7

Jest to możliwe duplikat Django Apache Redirect Problem, jak że odpowiedź rozwiązać ten problem.

W końcu natknąłem się na tę odpowiedź, otwierając prawie wszystkie "powiązane pytania" tutaj, po prostu z desperacji. Z mojej perspektywy myślę, że moje pytanie ma kilka cennych słów "przyjaznych dla wyszukiwania".

EDIT: Odpowiedź: (przez alex vasi)

Czego spróbować:

  1. Zmień bieżącą domenę do "yourdomain.tld/Cflow" w ramach "strony". Łatwo to zrobić przy użyciu komend django admin lub dumpdata/loaddata manage.py.
  2. Wygląda na to, że Twoja witryna używa dekoratora login_required. W tym konkretnym przypadku można dodać do settings.py:

    LOGIN_URL = '/ [prefix]/konta/login /'

+0

Proszę nie usuwać własnego pytania (z powodu, o którym wspomniałeś). Uważam, że administrator może cofnąć usunięcie Twojego posta, ale prawdopodobnie nie będzie nawet, gdyby lepiej go zachować. Ale proszę przyjąć własne rozwiązanie po upływie obowiązkowego okresu oczekiwania. –

2

w adresach URL.py zmienia nazwy urlpatterns na base_urlpatterns; następnie dodaj definicję następującą na końcu tego samego pliku:

urlpatterns = patterns('', 
    '^', include(base_urlpatterns), # iff you wish to maintain the un-prefixed URL's too 
    '^your_prefix/', include(base_urlpatterns), 
) 
+7

Ten rodzaj skrzypiec nie powinien być potrzebny i na pewno nie poleciłby go, ponieważ implikuje to, że mają dwa adresy URL do tego samego zasobu, co jest złym zwyczajem. –

Powiązane problemy