현재 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})
는 소리 orginal 한 문서를 참조하십시오이 게시물을 시도 할 수 있습니다 '링크를위한 완전한 절대 URL을 적절히 구성하기위한 템플릿과 코드에서. 이것은 Django 애플리케이션의 마운트 지점이 URL에 포함되도록 사용되어야합니다. 그렇지 않으면''/ djproj'' 접두사가 누락됩니다. https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#url –
@GrahamDumpleton이 링크 된 문서를보고 이것이 문제라고 생각하지 않습니다. 추론을 위해 위의 편집을 참조하십시오. – chaserchap
URL 패턴의 경로는 앞에 "djproj /"가 없어야합니다. 이는 패턴 일치를 위해 전달 된 URL에 삭제됩니다. 즉, 패턴에는 WSGI 서버에 사용하라는 특정 마운트 포인트가 포함되어서는 안됩니다. 또한 홈 페이지 패턴은''r '^ [/]? $'''이 아니라''r '^ $'''이어야합니다. 후자에 슬래시가있을 경우 후행 슬래시 방향이 엉망이 될 가능성이 있습니다. ''WSGIScriptAlias / djproj''를 사용하는 것이 더 일반적입니다. 마운트 포인트에 대한 mod_wsgi 지시어에는 슬래시가 없습니다. –