让 apache 和 django 添加一个斜杠

Posted

技术标签:

【中文标题】让 apache 和 django 添加一个斜杠【英文标题】:making apache and django add a trailing slash 【发布时间】:2011-01-31 22:45:55 【问题描述】:

我的 /train 目录通过以下方式别名为 httpd.conf 中的脚本: WSGIScriptAlias /train /some-path/../django.wsgi

它运行良好,除了一个问题。如果用户转到 /train(没有尾部斜杠),它不会将他重定向到 /train/,而只会给他正确的页面。这是一个问题,因为这样一来,当没有使用斜杠访问该页面时,该页面上的相对链接会导致错误的位置。

如何解决?

谢谢。

【问题讨论】:

您问的是docs.djangoproject.com/en/dev/ref/settings/#append-slash 设置吗? 原来我实际上是在寻找 Apache 解决方案,因为目前当用户转到 /train 时,没有任何东西转发到我的 Django 代码。感谢您的评论。 【参考方案1】:

将您的 urlconf 设置为接受 train/ 为有效,然后使 train 导致 generic redirect 到 /train/

【讨论】:

谢谢,但 Django 无法判断用户是去训练还是训练/,因为两者都被模式“^$”检测到,因为 Apache 服务器只重定向 /train/(.*)给姜戈。我想解决方案必须在 httpd.conf 而不是在 Django 中,至少如果我想让我的 Django 代码独立于包含目录(也就是说 - 在 httpd.conf 中将 /train/ 更改为其他名称应该是如果我想更改目录名称,唯一要做的事情)。【参考方案2】:

如果您只需要从 /train 重定向到 /train/ 而不是从没有尾部斜杠的每个子目录中重定向,那么使用 RedirectMatch 指令有一个更简单的解决方案:

RedirectMatch ^/train$ /train/

【讨论】:

【参考方案3】:

我正在使用类似的东西将 /train 重定向到 /train/,我所做的是将所有不以 / 结尾的 URL 重定向到 /train/。

<Location "/train">
     Order deny,allow
     Allow from all
     RewriteEngine on
     RewriteRule  !^.*/$  /train/  [R]
</Location>

WSGIScriptAlias /train /some-path/../django.wsgi

【讨论】:

终于找到解决办法了!非常感谢!

以上是关于让 apache 和 django 添加一个斜杠的主要内容,如果未能解决你的问题,请参考以下文章

URLS 问题中的 Django 双斜杠(多个 Web 服务器、Apache 和 Nginx)

django网页问题 url自动添加了斜杠

如何禁用 301 重定向,在 Apache 中将斜杠添加到目录名称

Apache伪静态在网站目录没有反斜杠后自动添加反斜杠

Django - 从斜杠重定向到非斜杠

为啥在 URL 的末尾需要一个斜杠?