【问题标题】:Redirect loop when removing www in with RewriteEngine使用 RewriteEngine 删除 www 时的重定向循环
【发布时间】:2023-12-07 08:45:02
【问题描述】:

注意:我已经看到其他有关重定向 www->non-www 的问题/答案。这是更多了解为什么这不起作用

所以我有一个大致如下所示的 VirtualHost 文件

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ...
    RewriteEngine on
    RewriteCond %{HTTP_HOST} www.(.+) [NC]
    RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [R=301]
    ...
</VirtualHost>

但是当我尝试它时,我不断收到重定向循环。我在访问日志中没有看到任何信息告诉我它正在重定向到什么

我怀疑它总是错误地转到 www.domain.com 而不是 domain.com,尽管我确信这应该是正确的......

【问题讨论】:

    标签: .htaccess mod-rewrite redirect apache2 virtualhost


    【解决方案1】:

    试试这个规则:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
    

    由于使用了%{SERVER_NAME} 变量,您可能会进入循环。

    【讨论】:

    • 我没有正确引用它吗?根据这里,这似乎是正确的httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond
    • 是的,我也知道那个文档,但可能%{SERVER_NAME} 被设置为www.domain.com。您尝试过这个建议的规则吗?
    • 成功了!稍后我会将其标记为已回答,尽管我只是想看看是否有人对变量设置不正确的原因有想法
    • 嗯,我怀疑是因为ServerAlias 行。