【问题标题】:URL Redirect with Python / Django / Mod-Rewrite使用 Python / Django / Mod-Rewrite 进行 URL 重定向
【发布时间】:2025-12-24 03:55:11
【问题描述】:

我正在尝试为我正在为船舶维修设置的问答网站设置 URL 重定向。我想让boatrepaired.com 转到www.boatrepaired.com。我通常是一个 php 人,所以我对 OSQA 使用的 python 等有点困惑。我将此添加到我的 apache conf 文件中...

<Directory /opt/OSQA/>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^boatrepaired\.com [NC]
RewriteRule ^(.*)$ http://www.boatrepaired.com/$1 [L,R=301]
</Directory>

通过将boatrepaied.com 发送到...www.boatrepaired.com/osqa.wsgi/

如果我删除第 5 行的 $1,它会完美运行,只是它将所有人重定向回首页。任何帮助将不胜感激。

谢谢,

克里斯

【问题讨论】:

    标签: python django apache url mod-rewrite


    【解决方案1】:

    OSQA 基于 Django,Django 可以自动为您执行此操作(我很确定 OSQA 默认启用此功能)。

    如果没有,请将此设置添加到您的 Django 设置模块:

    如果 PREPEND_WWW 为 True,则 URL 缺少前导“www”。将会 重定向到同一个 URL 领先的“www.”领先的“www.”

    并确保django.middleware.common.CommonMiddleware 已启用。

    【讨论】:

      【解决方案2】:

      为什么不在 apache 中完全解决这个问题:

      <VirtualHost ..>
          ServerName boatrepaired.com
      
          Redirect permanent / http://www.boatrepaired.com/ 
      </VirtualHost>
      
      <VirtualHost ..>
          ServerName www.boatrepaired.com
      
          ... basic wsgi / django config ...
      </VirtualHost>
      

      因此,两个域的虚拟主机分开,从“错误”的一个永久重定向到正确的一个。它适用于域内的所有路径,而不仅仅是 /

      【讨论】:

        【解决方案3】:

        如果您想使用 apache 的重写,您遇到的问题与重写规则行没有正确提取 URL 有关。与 Apache 网站上给出的示例相比,Django 需要更复杂的正则表达式。例如,对于 wsgi,您可以这样做将 http://example.com 重定向到 http://www.example.com

        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
        RewriteRule ^(.*)django.wsgi(.*)$ http://www.example.com$2 [R=301,L]
        

        其中 $2 是正则表达式的第二个匹配项,这是您要附加到 www.example.com 的部分。

        【讨论】: