【问题标题】:.htaccess is read but redirect not working.htaccess 已读取但重定向不起作用
【发布时间】: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/&lt;site-name&gt;/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 的答案来实现我想要的。但是我仍然对导致上述重定向行为的原因感兴趣。

【问题讨论】:

  • 您可能需要在&lt;site-name&gt;.com 中为&lt;site-name&gt;.com 使用ServerAlias,否则它甚至可能不会使用VirtualHost 来处理非www 主机名。相反,它可能由 Apache 配置中的第一个 VirtualHost 处理,如果您有多个配置,则可能是不同的。无论哪种方式,我都会推荐已经给出的答案,即为重定向创建一个单独的VirtualHost
  • @GrahamDumpleton:我之前确实有过,但我只是在发布问题之前删除了 ServerAlias。目前,我使用@Finbarr 的答案,在这种情况下,site-name.com 单独为VirtualHost,因此可能不需要对该网址进行别名。

标签: django apache .htaccess mod-wsgi


【解决方案1】:

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

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

【讨论】:

  • 太好了,刚刚试了一下,效果很好!谢谢,并将标记为答案。
猜你喜欢
  • 2016-04-08
  • 2015-03-07
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2015-08-03
相关资源
最近更新 更多