通过 apache 重写规则永久重定向

Posted

技术标签:

【中文标题】通过 apache 重写规则永久重定向【英文标题】:Permanent redirect via apache rewrite rules 【发布时间】:2011-07-30 01:35:06 【问题描述】:

我正在尝试编写一个规则来永久地将一个域名重定向到另一个域名

RewriteCond %HTTP_HOST ^www.companyname1.com$
RewriteRule ^(.*)$ http://www.companyname2.com/$1 [R=301,L]

这只有在用户记得输入 www 时才有效,如果用户没有在 url 中输入 www,页面将加载但图片链接将被破坏。

有谁知道如何调整上述规则以使其在有和没有 www 的情况下都适用?

我正在使用 LAMP 配置,redhat 上的 apache 2。

【问题讨论】:

【参考方案1】:

您可以使用 [OR] 提供几个可选的重写条件:

RewriteCond %HTTP_HOST ^www.companyname1.com$ [OR]
RewriteCond %HTTP_HOST ^companyname1.com$
RewriteRule ^(.*)$ http://www.companyname2.com/$1 [R=301,L]

这应该可以解决问题。第一个 Rewrite-Condition 触发,如果 www 存在,第二个触发,如果 www 被忘记了。

【讨论】:

符号名称 [R=permanent]" 而不是数字 301 稍微更好一些,因为它可以避免在您的配置中造成混淆。来自httpd.apache.org/docs/2.0/mod/mod_rewrite.html 使用:"RewriteRule ^(.*)$ @ 987654322@ [R=永久,L]" 对我来说,RewriteRule companyname2.com/$1 在域之后添加了一个额外的斜杠,所以我不得不用 companyname2.com$1 替换它 @Stickley 哇。 “稍微更优化”。您是否知道“最佳”是***的? 您应该始终注意使用301 别名permanent: ***.com/questions/9130422/… 是否是个好主意【参考方案2】:

重定向对我不起作用,我不得不对其进行调整,下面是基于@Demento 回答的工作版本。

# Parmenent redirect to webdesign.danols.com of all pages
RewriteEngine on
RewriteCond %HTTP_HOST ^www.kingston-web-design.com [OR]
RewriteCond %HTTP_HOST ^kingston-web-design.com
RewriteRule ^(.*)$ http://webdesign.danols.com.com$1 [R=301,L]

【讨论】:

【参考方案3】:

如果您不关心主机名以什么开头,则不要 root 正则表达式,只需检查它是否以 companyname1.com 结尾。

至于前导斜杠,只需将其作为可选添加到正则表达式的根目录即可。

RewriteCond %HTTP_HOST companyname1.com$
RewriteRule ^/?(.*) http://www.companyname2.com/$1 [R=permanent,L]

【讨论】:

【参考方案4】:

或者只是使用简单的正则表达式:

RewriteCond %HTTP_HOST ^(www.)?companyname1\.com$
RewriteRule ^(.*)$ http://www.companyname2.com/$1 [R=301,L]

【讨论】:

以上是关于通过 apache 重写规则永久重定向的主要内容,如果未能解决你的问题,请参考以下文章

nginx重写重定向文件夹

iis里URL重写重定向,http做301重定向https

将 ssl 重定向到非 ssl

apache实现301永久性重定向代码

Apache:使用通配符永久重定向到 HTTPS

apache永久重定向所有请求到另一个端口