【问题标题】:Double slash when 301ing from foo.com to www.foo.com with Django / Apache / mod_wsgi使用 Django / Apache / mod_wsgi 从 foo.com 到 www.foo.com 的 301 时双斜线
【发布时间】:2013-05-20 06:09:16
【问题描述】:

我们有一个通过 mod_wsgi 在 Apache 上运行的 Django 应用程序。

我们的主域是 foo.com(不带 www),但我们还想管理 www 请求,将它们重定向到具有 301 的主域。

我是这样设置的

<VirtualHost xxx.xxx.xxx.xxx:80>

   DocumentRoot /var/www/vhosts/foo.com/public
   ServerName foo.com
   ServerAlias www.foo.com

   Alias /media/  /var/www/vhosts/foo.com/public/media/
   Alias /static/ /var/www/vhosts/foo.com/public/static/

   RewriteEngine On

   RewriteCond %{HTTP_HOST}    !=foo.com [NC]
   RewriteRule ^(.*)$          http://foo.com/$1 [L,R=301]


   <Directory /var/www/vhosts/foo.com/public>
       Order allow,deny
       Allow from all
       AllowOverride All
   </Directory>

   WSGIDaemonProcess foo.com processes=5 threads=30 display-name=%{GROUP}
   WSGIProcessGroup foo.com

   WSGIScriptAlias / /var/www/vhosts/foo.com/fooproject/fooproject/wsgi.py

   LogLevel debug
   ErrorLog /var/www/vhosts/foo.com/logs/error.log
   CustomLog /var/www/vhosts/foo.com/logs/access.log combined

</VirtualHost>

一切正常,但我在 www.foo.com 上的每个请求都有双斜杠

例子:

www.foo.com -> foo.com//
www.foo.com/ -> foo.com//
www.foo.com/page  -> foo.com//page

通常该规则适用于 PHP 网站。

可以是什么?有什么我可以看懂的吗?

PS。我已将 Django APPEND_SLASH 设置为 False

【问题讨论】:

  • 这可能是罪魁祸首吗? http://foo.com/$1 不过我觉得还不错。
  • 好吧,我之前没试过。这修复了带有页面而不是主页的调用。我现在正在更新问题
  • 看看这是否有任何作用(来自 Apache 文档):RewriteRule ^/(.+) http://foo.com/$1 [L,R=301]
  • 找到了。我被代理解析缓存或类似的东西困住了。 @karthikr 如果您想回答您的建议(RewriteRule ^(.*)$ foo.com$1 [L,R=301]),我很乐意将您的答案标记为正确。

标签: django apache mod-wsgi virtualhost http-status-code-301


【解决方案1】:

改变

RewriteRule ^(.*)$          http://foo.com/$1 [L,R=301]

RewriteRule ^(.*)$          http://foo.com$1 [L,R=301]

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多