让 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)