Apache 重定向至 SERVER_NAME

Apache 重定向至 SERVER_NAME

抱歉,这个问题比较菜鸟。

Ubuntu 14 上的 Apache 2.4。

我看到很多重定向答案都硬编码了 URL。我还看到一个答案包含 Apachemacro和变量。

我想要一个简单的、域名可移植的解决方案。

我尝试了这个但最终陷入了重定向循环或 404,具体取决于我访问的地址:

#global ServerName
ServerName example.com
<VirtualHost *:80>
  ServerName butkus.com
  ServerAlias www.butkus.com

  RewriteEngine on
  RewriteCond %{HTTP_HOST}    !^%{SERVER_NAME} [nocase]
  RewriteRule ^(.*)$          %{SERVER_NAME} [last,redirect=301]
  .
  .
  .
</VirtualHost>

我不确定 是%做什么的。我假设这是必要的语法。我尝试的逻辑是,如果请求的主机名与 不匹配VirtualHostServerName则重定向到ServerName

左侧的 URL 应重定向至右侧的 URL:

www.butkus.com -> butkus.com www.butkus.com/widget/party -> butkus.com/widget/party

如果我交换 ServerName 和 ServerAlias 值,我希望它反向工作。

我怎样才能做到这一点?

答案1

缺少的一件事是您需要在 RewriteRule 行上添加 http://。

RewriteRule ^(.*)$          http://%{SERVER_NAME} [last,redirect=301]

如果这不起作用,请增加使用日志记录LogLevel trace6,然后发出请求并检查 Apache 错误日志以查看它正在尝试做什么。

提示:调试时只需使用redirect而不是,redirect=301这样您就不必处理可能导致的浏览器缓存重定向和徒劳无功的事情。

相关内容