解决Django URL带有多个斜杠的问题开发与生产不一致

2024-09-30 01:24:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python+Django网站,由uWSGI和NginX控制

在生产环境中,下面的每个地址都指向一篇文章APPEND_SLASH=True设置使第一个URL(非斜杠)重定向到第二个URL(带有一个斜杠)-这是我理解的部分

是什么使得第三、第四和每个URL都有任意数量的斜杠工作?

1. http://example.com/my-article-slug
2. http://example.com/my-article-slug/
3. http://example.com/my-article-slug//
4. http://example.com/my-article-slug///
5. ...

带有多个斜杠的URL只需正确解析Django视图(ArticleDetail),并显示文章,而无需重定向(!)

然而,在Django本地开发web服务器上,上述链接中只有前两个有效^若URL有多个斜杠,则返回{}

根据我的调查DEBUG设置与这个问题无关

值得注意的是,当我想从URI解析Django视图时,这种行为是一个问题,因为带有许多尾部斜杠的地址(在生产环境中)工作正常,但它们不能通过django.urls.resolve正确解析:

>>> from django.urls import resolve
>>> resolve('/my-article-slug/')
ResolverMatch(func=articles.views.ArticleDetail, args=(), kwargs={'slug': 'my-article-slug'}...
>>> resolve('/my-article-slug//')
django.urls.exceptions.Resolver404...

Django URL联合配置

# urls.py
from django.urls import include, path

urlpatterns = [
    path('', include('articles.urls')),
]

# articles/urls.py
from django.urls import path
from articles.views import ArticleDetail

urlpatterns = [
    ...
    path('<slug:slug>/', ArticleDetail.as_view(), name='article-detail'),
    ...
]

顺便说一下,我注意到这是很常见的行为,即:

https://www.djangoproject.com////////////
https://docs.djangoproject.com/en/3.0////////////
https://www.dropbox.com////////////
https://www.dropbox.com/individual////////////
https://www.quora.com////////////
https://www.quora.com/answer////////////

也许是NginX相关的问题


Tags: djangohttpscomhttpurlexamplemywww

热门问题