gpt4 book ai didi

django - 尾随斜杠 "/"未添加到根 url

转载 作者:行者123 更新时间:2023-12-04 04:52:54 24 4
gpt4 key购买 nike

我最近遇到了一个我无法解决的非常奇怪的问题。
我正在使用 mod_wsgi 和 apache 运行 django,问题是

www.example.com/subdir

不是针对
www.example.com/subdir/

urls.py 看起来像这样:
import os
from django.conf.urls.defaults import *
from fileupload.views import PictureCreateView, PictureDeleteView

urlpatterns = patterns('',
(r'^$', PictureCreateView.as_view(), {}, 'upload-new'),
(r'^delete/(?P<pk>\d+)$', PictureDeleteView.as_view(), {}, 'upload-delete'),
(r'^fileupload/media/(.*)$', 'django.views.static.serve',
{'document_root':os.path.join(os.path.abspath(os.path.dirname(__file__)),'media')}),

)

在末尾添加斜杠对我来说很重要。
我尝试将 .htaccess 放在文件夹中,但它仅适用于 Firefox 而不适用于谷歌浏览器。

你能建议一种用 django 来做到这一点的方法吗,或者这是 apache 而不是 django 的问题

编辑 1:
APPEND_SLASH 未设置为 false。

httpd.conf 也有这个:
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName example.cm

WSGIScriptAlias /subdir /var/www/html/cloudcv/apache/django.wsgi
<Directory /var/www/html/cloudcv>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

settings.py 有这个:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'fileupload.urls'
APPEND_SLASH = true

同样为了让事情更清楚,当我输入 时,附加斜杠工作正常r'^new$' 而不是 r'^$'
并且文件目录结构是这样的:
- /var/www/html/cloudcv/
+ apache
-fileupload
urls.py
views.py
<other files>
settings.py
<other files>

这里的“其他文件”是指目录的其他文件

更新1:
orokusaki 指出了上传-删除 url 中的一个新错误,他更新了他的答案以更正。只是指出这一点,因为它可能对得出此答案的其他人有所帮助。

最佳答案

这实际上是现代浏览器试图美化 HTTP 的产物。如果您从 URL 栏中复制 URL(或查看 HTTP header ),您可能会看到尾部斜杠确实存在。
更新
我没仔细看你的 urls.py .你只需要这样做:

urlpatterns = patterns('',
(r'^$', PictureCreateView.as_view(), {}, 'upload-new'),
(r'^delete/(?P<pk>\d+)/$', PictureDeleteView.as_view(), {}, 'upload-delete'),
(r'^fileupload/media/(.*)$', 'django.views.static.serve',
{'document_root':os.path.join(os.path.abspath(os.path.dirname(__file__)),'media')}),

)
请注意 /添加到 upload-delete URL(对您希望以斜杠结尾的任何其他 View 执行相同操作)。方式 APPEND_SLASHES作品更好地记录在 CommonMiddleware docs 中比它在设置文档中。它的要点是:如果 A) request.path与您的应用程序中的任何 URL 模式都不匹配,并且 B) request.path + '/'确实与您的应用程序中的 URL 模式匹配,Django 将重定向到后者。
您的 upload-delete URL 不匹配 /delete/123/即使您手动输入,因为额外的 /与正则表达式不匹配。

关于django - 尾随斜杠 "/"未添加到根 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17156965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com