Проблемы с обслуживанием приложения Django через подпуть в Apache

У меня есть приложение Django (Django version 4.2.11), которое я хочу обслуживать по подпути с помощью Apache. В частности, я хочу обслуживать приложение по адресу https://example.com/subpath, чтобы другие URL-адреса приложений Django были доступны как подпути. Например:

  1. https://example.com/subpath/admin должен загрузить страницу администратора Django.
  2. https://example.com/subpath/api должен загрузить конечные точки API.

Однако я сталкиваюсь с ошибкой 404, когда пытаюсь получить доступ к этим URL-адресам.

Вот моя текущая конфигурация Apache для перенаправления приложения Django на подпуть:

<VirtualHost *:443>
    ServerName example.com
    DocumentRoot /var/www/html

    SSLEngine on
    RewriteEngine on

    # Redirect /subpath to INTERNAL_IP:8000
    RewriteCond %{REQUEST_URI} ^/subpath
    RewriteCond %{HTTP:Upgrade} =websocket
    RewriteRule /(.*) ws://INTERNAL_IP:8000/$1 [P,L]

    RewriteCond %{REQUEST_URI} ^/subpath
    RewriteCond %{HTTP:Upgrade} !=websocket
    RewriteRule /(.*) http://INTERNAL_IP:8000/$1 [P,L]

    ProxyPass /subpath http://INTERNAL_IP:8000/
    ProxyPassReverse /subpath http://INTERNAL_IP:8000/
    ProxyRequests Off

</VirtualHost>

Мой файл Django urls.py:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from apscheduler.schedulers.background import BackgroundScheduler
from my_app.management.commands import run_schedules

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('my_app.urls')),
    path('api/', include('auth_app.urls')),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

admin.site.site_header = 'My API Administration'
admin.site.index_title = 'My API Admin Area'
admin.site.site_title = 'My API Administration'

scheduler = BackgroundScheduler()
scheduler.add_job(run_schedules.Command().handle, 'interval', minutes=0.50)
scheduler.start()

Выпуск

Несмотря на эти настройки, я по-прежнему сталкиваюсь с ошибкой 404 при попытке получить доступ к https://example.com/subpath/admin. URL http://INTERNAL_IP:8000/admin работает нормально.

Шаги, которые я предпринял до сих пор, но все еще не решил проблему

  1. Обновите конфигурацию Apache для работы с подпунктом и перезапустите Apache.
  2. Обновите Django urls.py, чтобы включить префикс /subpath.
  3. Установите FORCE_SCRIPT_NAME в settings.py.

Любая помощь или руководство были бы очень признательны.

Вернуться на верх