2017-09-08 5 views
0

현재 Apache 서버에서 Django 사이트를 호스팅하고 있습니다. Django 사이트는 로컬에서 호스팅 할 때 제대로 작동하지만 사이트의 다른 부분으로 이동하려고 시도 할 때마다 서버에서 호스팅 할 때 오류가 발생합니다. 약자로 example.com/djproj로 이동하여 홈페이지로 이동할 수 있습니다. 이렇게하면 로그인 화면이 표시됩니다. 자격 증명을 입력하고 제출 버튼을 누르면 지원되지 않는 example.com으로 이동합니다. 그러나 수동으로 example.com/djproj으로 다시 이동하면 홈 화면으로 이동하고 로그인 한 상태에서 버튼 중 하나를 클릭하면 유사한 오류. 특히, 직접 입력하여 지원 URL (URL 파일 중 하나)로 이동하려는 경우, 즉 example.com/djproj/precheck/을 입력하면 요청 URL이 example.com//precheck/임을 나타내는 404가 표시됩니다.Apache에서 Django가 잘못 리디렉션 됨

필자가 적용 할 수있는 스크립트를 제공하려고 노력할 것입니다.하지만 뭔가를 놓치고 있다면 기꺼이 제공 할 것입니다.

파일 구조는 /var/www/html/djproj/cif인데, cif에는 manage.py과 같은 모든 일반 django 파일 및 관련 응용 프로그램 폴더가 들어 있습니다.

wsgi.py

import os, sys 

from django.core.wsgi import get_wsgi_application 

path = 'var/www/djproj/grip/cif' 

if path not in sys.path: 
    sys.path.append(path) 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "grip.settings") 

application = get_wsgi_application() 

urls.py

from django.conf.urls import url, include 
from django.contrib import admin 
from django.conf import settings 
from django.conf.urls.static import static 
from precheck import views 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^accounts/', include('accounts.urls')), 
    url(r'^precheck/', include('precheck.urls')), 
    url(r'^[/]?$', views.upload, name = 'home'), 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

을 httpd.conf (적용 가능한 부분)

WSGIScriptAlias /djproj/ /var/www/html/djproj/cif/grip/wsgi.py process-group=16$ 
WSGIPythonPath /var/www/html/djproj/ 

<Directory /var/www/html/djproj/cif/grip> 
    <Files wsgi.py> 
     Order deny,allow 
     Allow from all 
    </Files> 
</Directory> 

EDIT : 의견에 제안을 시도합니다. 내가 example.com/djproj로 이동하려고

urls.py

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^djproj/accounts/', include('accounts.urls')), 
    url(r'^djproj/*precheck/', include('precheck.urls')), 
    url(r'^djproj[/]?$', views.upload, name = 'home'), 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Page not found at / 아파치가 삭제되는 URL을 다시 통과 할 때 보인다 그것을 말한다 :

나는 다음과 URL을 변경 example.com/djproj. 마찬가지로 내가 example.com/djproj/precheck/을 시도하면 example.com//precheck/의 요청 URL을 가진 404를 얻습니다. 그리고 위의 urlpatterns에 나열된 URL 인 '이들'은 The current path, /precheck/, didn't match any of these.입니다. (URL을 코딩하는 방법보기)

편집 :이 가리키는 곳

하고 Upload.html

<form method = "POST" action="{% url 'precheck:upload' %}" enctype="multipart/form-data" name="uploadForm"> 
    {% csrf_token %} 

    {% for field in form %} 
    <div class="form-row"> 
     {{field.errors }} 
     {{ field.label_tag }} {{ field }} 
     {% if field.help_text %} 
      <p class ="help-text">{{ field.help_text }}</p> 
     {% endif %} 
    </div> 
    {% endfor %} 

    <br /> 
    <button type="button" id="uploadButton" data-loading-text="Loading..." class="btn btn-primary" autocomplete="off">Upload</button> 

</form> 

참고 {% url 'precheck:upload'}의 사용은 여기 prechecks.urls에서 :

urls.py - 사전 점검

from django.conf.urls import url 
from . import views 

app_name = 'precheck' 

urlpatterns = [ 
    url(r'^success/', views.successful_upload, name = 'successful_upload'), 
    url(r'^failed_upload/', views.failed_upload, name = 'failed_upload'), 
    url(r'^run_precheck/', views.run_precheck, name = 'run_precheck'), 
    url(r'^running_checks/', views.run_selected_checks, name = 'run_selected_checks'), 
    url(r'^checks_successful/', views.checks_successful, name = 'checks_successful'), 
    url(r'^checks_failed/', views.checks_failed, name = 'checks_failed'), 
    url(r'^$', views.upload, name = 'upload'), 
] 

보기.평

@login_required 
def upload(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES, user = request.user) 
     if form.is_valid(): 
      form.save() 
      request.session['jobID'] = request.POST['jobID'] 
      #job = Job.objects.filter(user_id = request.user.id).filter(jobID = request.POST['jobID']).latest() 
      # initialize(job) 
      return render(request,'precheck/run_precheck.html') 
    else: 
     form = UploadFileForm() 
    return render(request, 'precheck/upload.html',{'form': form}) 
+0

는 소리 orginal 한 문서를 참조하십시오이 게시물을 시도 할 수 있습니다 '링크를위한 완전한 절대 URL을 적절히 구성하기위한 템플릿과 코드에서. 이것은 Django 애플리케이션의 마운트 지점이 URL에 포함되도록 사용되어야합니다. 그렇지 않으면''/ djproj'' 접두사가 누락됩니다. https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#url –

+0

@GrahamDumpleton이 링크 된 문서를보고 이것이 문제라고 생각하지 않습니다. 추론을 위해 위의 편집을 참조하십시오. – chaserchap

+0

URL 패턴의 경로는 앞에 "djproj /"가 없어야합니다. 이는 패턴 일치를 위해 전달 된 URL에 삭제됩니다. 즉, 패턴에는 WSGI 서버에 사용하라는 특정 마운트 포인트가 포함되어서는 안됩니다. 또한 홈 페이지 패턴은''r '^ [/]? $'''이 아니라''r '^ $'''이어야합니다. 후자에 슬래시가있을 경우 후행 슬래시 방향이 엉망이 될 가능성이 있습니다. ''WSGIScriptAlias ​​/ djproj''를 사용하는 것이 더 일반적입니다. 마운트 포인트에 대한 mod_wsgi 지시어에는 슬래시가 없습니다. –

답변