.htaccess被读取但重定向不起作用

时间:2015-05-07 00:25:18

标签: django apache .htaccess mod-wsgi

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

我启用了mod_rewrite:执行命令Module rewrite already enabled时,我有

  

模块重写已启用

site.conf中的sites-available读取

<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文件位于/var/www/<site-name>/app目录:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

如果我将随机代码放在.htaccess中,该网站将抛出500 error,但重定向永远不会起作用(它的行为方式如下):

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

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

1 个答案:

答案 0 :(得分:3)

当你有权访问conf文件时,我个人不会修改.htaccess文件来执行此操作。我将为重定向创建一个单独的虚拟主机条目,并保持主站点虚拟主机正常。典型的重定向在conf文件中看起来像这样。

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