我使用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的答案来实现我想要的。但后来我仍然对导致上述重定向行为的原因感兴趣。
答案 0 :(得分:3)
当你有权访问conf文件时,我个人不会修改.htaccess文件来执行此操作。我将为重定向创建一个单独的虚拟主机条目,并保持主站点虚拟主机正常。典型的重定向在conf文件中看起来像这样。
<VirtualHost *:80>
ServerName www.yoursite.com
Redirect 301 / http://yoursite.com/
</VirtualHost>