2009-09-23 23 views
10

A continuación se muestran los archivos de configuración relevantes, también en http://dpaste.com/97213/.Ejecute Django con el prefijo de la URL ("subdirectorio"): ¿la aplicación funciona, pero las URL están rotas?

La configuración de apache está funcionando actualmente, porque el acceso a 'example.com/' me muestra el archivo index.html que he colocado en la raíz del documento.

Me gustaría servir Django/aplicaciones con el prefijo '/ d', por lo que 'example.com/d/' cargaría la aplicación predeterminada, 'example.com/d/app3' cargaría otra, como configurado en urls.py.

Sirviendo Django, estoy usando el mod_wsgi sugerido, en Linux.

Actualmente, se puede acceder a la aplicación para compras 'example.com/d', pero cuando el decorador @login_required trata de enviarme a la página de inicio de sesión, me envían a 'example.com/accounts/login', en lugar del 'example.com/d/accounts/login' esperado.

Dado que la aplicación predeterminada se carga correctamente, no estoy seguro de qué estoy haciendo mal aquí, o si esto es un error en Django al generar las direcciones URL.

¿Alguna sugerencia?

EDIT: Como nota, si cambio de la línea de configuración de Apache: WSGIScriptAlias ​​/ d /home/blah/django_projects/Tickets/apache/django.wsgi a WSGIScriptAlias ​​//home/bla/django_projects /Tickets/apache/django.wsgi La aplicación, los comentarios y el inicio de sesión funcionan bien. Incluso yendo a 'example.com/admin' carga al administrador, aunque he dejado el medio de administración roto, por lo que no hay hojas de estilo cargadas.

--- Follow Configs:

# 
# /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> 

Respuesta

7

Este es un posible duplicado de Django Apache Redirect Problem, como esa respuesta solucionó este problema.

Sólo el tiempo nos topamos con esa respuesta mediante la apertura de casi todas las preguntas relacionadas '' aquí, justo fuera de la desesperación. Desde mi punto de vista, creo que mi pregunta tiene algunas palabras valiosas de "búsqueda amigable".

EDIT: La respuesta: (a través alex vasi)

cosas para probar:

  1. cambio de dominio actual a "yourdomain.tld/cflow" en el marco de "sitios". Es fácil de hacer usando los comandos django admin o dumpdata/loaddata manage.py.
  2. Parece que su sitio está utilizando el decorador de login_required. En ese caso en particular puede agregar a settings.py:

    LOGIN_URL = '/ [prefijo]/accounts/login /'

+0

No borre su propia pregunta (por la razón que ha mencionado). Creo que es posible que un administrador reemplace su publicación, pero probablemente ni siquiera hubiera sido mejor mantenerla. Pero acepte su propia solución después del período de espera obligatorio. –

2

en sus URL.py cambiar el nombre de los urlpatterns a base_urlpatterns; a continuación, agregue la siguiente definición al final del mismo archivo:

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

Ese tipo de violín no debería ser necesario y, desde luego, no lo recomendaría, ya que implica que tiene dos URL para el mismo recurso, lo cual es una mala práctica. –

Cuestiones relacionadas