Django .htaccess已读取,但重定向不起作用

Django .htaccess已读取,但重定向不起作用,django,apache,.htaccess,mod-wsgi,Django,Apache,.htaccess,Mod Wsgi,我正在使用apache+django+mod_wsgi作为服务器。我的目标是将非wwwurl重定向到wwwurl 我启用了mod_rewrite:在执行已启用模块重写的命令时,我启用了 模块重写已启用 sites available中的site.conf读取 <VirtualHost *:80> # Admin email, Server Name (domain name), and any aliases ServerName www.<site-name>

我正在使用apache+
django
+
mod_wsgi
作为服务器。我的目标是将非
www
url重定向到
www
url

我启用了
mod_rewrite
:在执行已启用
模块重写的命令时,我启用了

模块重写已启用

sites available
中的
site.conf
读取

<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases

  ServerName  www.<site-name>.com
  RedirectMatch ^http://<site-name>.com/(.*)$ http://www.<site-name>.com/$1

</VirtualHost>

<Directory /var/www/<site-name>/app>
AllowOverride All
  Order allow,deny
  Allow from all
  Header set Access-Control-Allow-Origin "http://<site-name>.com"
</Directory>
如果我将随机代码放入
.htaccess
,站点将抛出
500错误
,但重定向永远不会工作(它的行为方式如下所示):

  • 键入
    site name.com
    不会触发重定向
  • site name.com
    下,单击链接(由
    reverse()
    函数生成)将不会触发重定向
  • 直接输入
    site-name.com/morestuff
    将触发重定向到
    www.site-name.com/morestuff


很好,我可以使用@Finbarr的答案来实现我想要的。但是我仍然对导致上述重定向行为的原因感兴趣。

就我个人而言,当您有权访问conf文件时,我不会修改.htaccess文件来执行此操作。我将为重定向创建一个单独的virtualhost条目,并使主站点virtualhost保持正常。在conf文件中,典型的重定向如下所示

<VirtualHost *:80>
ServerName www.yoursite.com
Redirect 301 / http://yoursite.com/
</VirtualHost>

服务器名www.yoursite.com
重定向301/http://yoursite.com/

太好了,刚试过就行了!谢谢,并将标记为应答。您可能需要
VirtualHost
.com
ServerAlias
,否则它甚至可能不会使用该
VirtualHost
来处理非www主机名。相反,它可能由Apache配置中的第一个
VirtualHost
处理,如果您有多个,那么它可能是另一个。无论哪种方式,我都会推荐已经给出的答案,即仅为重定向创建一个单独的
VirtualHost
。@GrahamDumpleton:我以前有过,但我只是在发布问题之前删除了服务器别名。目前,我使用@Finbarr的答案,在这种情况下,
site name.com
单独是一个
VirtualHost
,因此可能不需要对该url使用别名。
<VirtualHost *:80>
ServerName www.yoursite.com
Redirect 301 / http://yoursite.com/
</VirtualHost>