httpd 将 .com 重定向/重写为 .org

httpd 将 .com 重定向/重写为 .org

我正在尝试将 www.example.com 重定向到 www.example.org。我不知道我做错了什么。

我已确保在 httpd.conf 中启用了 mod_rewrite:

LoadModule rewrite_module modules/mod_rewrite.so

我通过运行进一步验证了这一点: httpd -M并将其 rewrite_module (shared)包含在结果中。

稍后在同一个 httpd.conf 文件中是 VirtualHost 指令,我试图执行重写:

<VirtualHost *:80>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^example.com [NC]
    RewriteRule ^(.*)$ http://www.example.org/$1 [R=301,NC,L]

    ServerAdmin [email protected]
    DocumentRoot /var/www/html
    ServerName example.org
    ServerAlias www.example.org *.example.org
        <Directory "/var/www/html">
                Options Includes FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
    ErrorLog /var/www/logs/error_log
    CustomLog /var/www/logs/access_log common
</VirtualHost>

我们可以看到,我们在目录中遵循了 SymLinks(我认为这是要求),并且我们允许所有覆盖(这满足了另一个要求)。但显然我还是做错了。

你能发现它吗?

答案1

这里有两个问题:

  1. 您仅重写example.comwww.example.org,而不是任何其他主机名。我认为您会想要类似以下内容:

    RewriteCond %{HTTP_HOST} !www.example.org [NC]
    
  2. 您还需要将重写规则放入<VirtualHost>您要重定向的主机名的答案中,也就是说,它包含要重定向的主机名的ServerName和/或条目。ServerAlias

答案2

好吧,在花了几个小时做这件事之后,今天下午我又花了 2 或 3 个小时在这个项目上,然后休息了一会儿,又坐下来做这件事。五分钟后,它就正常工作了。

以下是我在过去几个小时所做的事情:

  • 将所有虚拟主机拆分到各自的 /etc/httpd/conf.d/*.conf 文件中
  • 将重写功能从 vhost 内部移至网站的 .htaccess 文件中

最后,成功的重写规则(我刚刚调整并成功测试)如下所示(在 .htaccess 内部):

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

关键要点:

  • 始终在重写条件中转义所有句号
  • 构建服务器时,第一次就做对。如果将虚拟主机拆分成单独的文件,您的工作将更加轻松。我一直想将此服务器上的每个网站拆分成自己的虚拟主机配置文件,而不是将配置放在 httpd.conf 中。
  • 当你想抓狂的时候,不要放弃。检查你的日志并继续测试(我打开了 RewriteLog 指令来帮助我进行故障排除 - 你知道这是 mod_rewrite 中可用的指令吗?是的,我也不知道)。
  • 如果使用一种方法不成功,请尝试另一种方法。我不断调整 httpd.conf、.htaccess 和 example.conf 文件。
  • 始终清除缓存,并确保在进行更改时重新启动 Apache。我经常这样做。

我很高兴这一切结束了……原本只需 5 分钟的工作变成了 5 小时以上的工作。天哪。

相关内容