diff --git a/acronomy/settings.py b/acronomy/settings.py index 6eedf8d..7f4a3bf 100644 --- a/acronomy/settings.py +++ b/acronomy/settings.py @@ -48,7 +48,8 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'simple_history.middleware.HistoryRequestMiddleware' + 'simple_history.middleware.HistoryRequestMiddleware', + 'common.redirect.NoTrailingSlashMiddleware' ] ROOT_URLCONF = 'acronomy.urls' diff --git a/common/__init__.py b/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/common/redirect.py b/common/redirect.py new file mode 100644 index 0000000..f23f087 --- /dev/null +++ b/common/redirect.py @@ -0,0 +1,21 @@ +from django.http import HttpResponseRedirect + + +class NoTrailingSlashMiddleware: + + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + old_url: str = request.path + if ( + old_url.endswith('/') + and not old_url.startswith("/admin") + and not old_url.startswith("/api") + and not old_url == "/" + ): + new_url = old_url[:-1] + return HttpResponseRedirect(new_url) + response = self.get_response(request) + + return response