diff --git a/apps/output/urls.py b/apps/output/urls.py index 47d3e038..9b92eb94 100644 --- a/apps/output/urls.py +++ b/apps/output/urls.py @@ -1,12 +1,16 @@ -from django.urls import path, include +from django.urls import path, re_path, include from .views import generate_m3u, generate_epg from core.views import stream_view - app_name = 'output' urlpatterns = [ - path('m3u/', generate_m3u, name='generate_m3u'), - path('epg/', generate_epg, name='generate_epg'), - path('stream//', stream_view, name='stream'), + # Allow both `/m3u` and `/m3u/` + re_path(r'^m3u/?$', generate_m3u, name='generate_m3u'), + + # Allow both `/epg` and `/epg/` + re_path(r'^epg/?$', generate_epg, name='generate_epg'), + + # Allow both `/stream/` and `/stream//` + re_path(r'^stream/(?P\d+)/?$', stream_view, name='stream'), ] diff --git a/dispatcharr/settings.py b/dispatcharr/settings.py index 027ffb8b..6c4f58fe 100644 --- a/dispatcharr/settings.py +++ b/dispatcharr/settings.py @@ -124,6 +124,7 @@ SERVER_IP = "127.0.0.1" CORS_ALLOW_ALL_ORIGINS = True CORS_ALLOW_CREDENTIALS = True +APPEND_SLASH = True REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ diff --git a/dispatcharr/urls.py b/dispatcharr/urls.py index 42d75f47..c5d99ccf 100644 --- a/dispatcharr/urls.py +++ b/dispatcharr/urls.py @@ -1,8 +1,8 @@ from django.contrib import admin -from django.urls import path, include +from django.urls import path, include, re_path from django.conf import settings from django.conf.urls.static import static -from django.views.generic import TemplateView +from django.views.generic import TemplateView, RedirectView from rest_framework import permissions from drf_yasg.views import get_schema_view from drf_yasg import openapi @@ -27,8 +27,13 @@ urlpatterns = [ path('output/', include('apps.output.urls', namespace='output')), # Admin + path('admin', RedirectView.as_view(url='/admin/', permanent=True)), # This fixes the issue path('admin/', admin.site.urls), + # Admin + path('output', RedirectView.as_view(url='/output/', permanent=True)), # This fixes the issue + path('output/', include(('apps.output.urls', 'output'), namespace='output')), + # Swagger UI path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),