抱歉,这个问题比较菜鸟。
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>
我不确定 是%
做什么的。我假设这是必要的语法。我尝试的逻辑是,如果请求的主机名与 不匹配VirtualHost
,ServerName
则重定向到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
这样您就不必处理可能导致的浏览器缓存重定向和徒劳无功的事情。