【发布时间】:2015-07-17 08:47:52
【问题描述】:
我使用apache + django + mod_wsgi 作为服务器。我的目标是将非www url 重定向到www url。
我启用了mod_rewrite:在执行命令Module rewrite already enabled 时,我启用了
模块重写已启用
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 文件位于/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 的答案来实现我想要的。但是我仍然对导致上述重定向行为的原因感兴趣。
【问题讨论】:
-
您可能需要在
<site-name>.com中为<site-name>.com使用ServerAlias,否则它甚至可能不会使用VirtualHost来处理非www 主机名。相反,它可能由 Apache 配置中的第一个VirtualHost处理,如果您有多个配置,则可能是不同的。无论哪种方式,我都会推荐已经给出的答案,即为重定向创建一个单独的VirtualHost。 -
@GrahamDumpleton:我之前确实有过,但我只是在发布问题之前删除了 ServerAlias。目前,我使用@Finbarr 的答案,在这种情况下,
site-name.com单独为VirtualHost,因此可能不需要对该网址进行别名。
标签: django apache .htaccess mod-wsgi