我最近遇到了一个非常奇怪的问题,我无法解决。我正在使用 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
另外为了让事情更清楚,当我输入 like r'^new$'而不是r'^$' 并且文件目录结构如下时,附加斜杠工作正常:
- /var/www/html/cloudcv/
+ apache
-fileupload
urls.py
views.py
<other files>
settings.py
<other files>
这里的“其他文件”是指目录的其他文件
更新 1:orokusaki 在上传删除 url 中指出了一个新错误,他更新了他的答案以更正。只是指出这一点,因为它可能对其他获得此答案的人有所帮助。