【问题标题】:How do I replace the domain name in a Apache Rewrite rule?如何替换 Apache 重写规则中的域名?
【发布时间】:2011-10-29 03:14:38
【问题描述】:

我需要在重写规则中将 URL domain.com 重定向到 domain.net。我最初使用重定向,但它丢失了我发送的 POST 变量。重写是否会延续它们?最好的方法是什么?

【问题讨论】:

  • 我不认为 rewrite mod 能够做到这一点!

标签: apache .htaccess


【解决方案1】:

这应该可以解决您的问题:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.thenewdomain.net/$1 [R=301,L]

【讨论】:

  • 当我使用这个时,我在重定向的 URL 中得到两个斜杠。喜欢...thenewdomain.net//login。因为$1/login 并且新域的末尾也有一个斜线。我必须使用RewriteRule ^/(.*)$ http://www.thenewdomain.net/$1 [R=301,L] 来排除$1RewriteRule ^(.*)$ http://www.thenewdomain.net$1 [R=301,L] 中的前导斜杠。第一个看起来更好,但我猜第二个更好。
  • 一个小而重要的细节。这不起作用:RewriteCond %{HTTP_HOST} ^www.domain.com$[OR]。需要加空格:RewriteCond %{HTTP_HOST} ^www.domain.com$ [OR]
  • 您不应该在mod_rewrite 示例中使用[R=301],因为如果有人只是复制并执行您的代码一旦忘记更改http://www.thenewdomain.net/,它将被缓存在他们的浏览器中并且没有简单的方法他修复此问题,直到使用某些工具重置完整的浏览器缓存。所以我建议将其更改为[R=302],以防止提问者进一步调试麻烦。
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 2014-06-30
  • 2016-08-09
  • 2016-10-17
  • 2011-04-10
相关资源
最近更新 更多