让Apache和Django添加尾随斜杠

4
我的/train目录通过在httpd.conf中的脚本进行别名设置: WSGIScriptAlias /train /some-path/../django.wsgi
它工作得很好,但是有一个问题。如果用户访问/train(没有斜杠),它不会重定向到/train/,而是直接给他正确的页面。这是一个问题,因为这种方式访问该页面时,相对链接会导致错误的位置。
如何解决这个问题?
谢谢。

你是在询问 http://docs.djangoproject.com/en/dev/ref/settings/#append-slash 这个设置吗? - S.Lott
原来我实际上是在寻找一个Apache的解决方案,因为目前当用户访问/train时,没有将任何内容转发到我的Django代码。感谢您的评论。 - user302099
3个回答

6
我使用类似这样的方法将 /train 重定向到 /train/,我的做法是将所有不以 / 结尾的 URL 重定向到 /train/。
<Location "/train">
     Order deny,allow
     Allow from all
     RewriteEngine on
     RewriteRule  !^.*/$  /train/  [R]
</Location>

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

终于有解决方案了!非常感谢! - user302099

6

如果您只需要将 /train 重定向到 /train/,而不是从每个没有斜杠结尾的子目录重定向,那么可以使用 RedirectMatch 指令来简化解决方案:

RedirectMatch ^/train$ /train/

0

将您的urlconf设置为接受train/作为有效内容,然后使train导向通用重定向/train/


谢谢,但Django无法确定用户是去了train还是train/,因为模式“^ $”检测到两者都被重定向到Django的Apache服务器只有/train/(.*)。 我想解决方案必须在httpd.conf中而不是在Django中,至少如果我想使我的Django代码独立于包含目录(也就是说-如果我想更改目录名称,则仅需在httpd.conf中更改/train/到其他名称)。 - user302099

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接