【发布时间】:2013-06-13 23:08:49
【问题描述】:
我最近遇到了一个非常奇怪的问题,我无法解决。 我正在使用 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 而不是 google chrome。
您能否建议一种使用 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 中的一个新错误,他更新了他的答案以更正。只是指出这一点,因为它可能对其他获得此答案的人有所帮助。
【问题讨论】:
-
你能显示你的中间件设置吗?
APPEND_SLASH设置是否也设置为False? -
更新了问题。请看一下
-
中间件设置?它需要
CommonMiddleware启用 -
是的。它已启用。抱歉,我忘了在 settings.py 中添加它。默认情况下是这样,所以我认为这不是问题的解决方案。
标签: django apache .htaccess apache-config