使用 WordPress 进行通配符域重定向

Posted

技术标签:

【中文标题】使用 WordPress 进行通配符域重定向【英文标题】:Wildcard domain redirect with WordPress 【发布时间】:2011-08-07 03:14:00 【问题描述】:

我有两个带有子域的域名设置如下...

blog.domain.com
www.blog.domain.com

blog.domain.info
www.blog.domain.info

两个域都指向同一服务器上的同一位置,即包含 WordPress 的目录。 (domain.com/blog)

为了让 Google 满意,我希望所有内容都重定向到这个域...

blog.domain.com

这是 WordPress 目录中包含的 .htaccess 文件中的内容...

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

所以我进入我的 cPanel 并添加了一个 301 域重定向,如下所示...

blog.domain.info -> blog.domain.com(“www”可选且已选择通配符)。

cPanel 然后根据 WordPress 重写规则自动将以下内容添加到同一个 .htaccess 文件中...

RewriteCond %HTTP_HOST ^blog.domain.info$ [OR]
RewriteCond %HTTP_HOST ^www.blog.domain.info$
RewriteRule ^(.*)$ "http\:\/\/blog\.domain\.com$1" [R=301,L]

问题是通配符部分似乎不起作用。

当我转到 blog.domain.info 时,我按预期被重定向到 blog.domain.com

但是当我转到 blog.domain.info/my-post 时,我根本没有被重定向。

    我该如何解决这个问题?我已经尝试重写我知道有效的规则,但我能想到的只是 WordPress 规则正在干扰。

    一旦修复,我可以将这些 mod-rewrite 移动到主机帐户 www 根目录中的主 .htaccess 中,使它们与 WordPress 规则分开吗? 编辑: 回答 - 不,它们不会工作,因为它们是停在根 www 目录下的域。

谢谢!

【问题讨论】:

【参考方案1】:

我为我的站点 MethodShop 拥有多个域,包括 methodshop.com、methodshop.net 等。在进行维护时,我会在不同站点之间转移流量,这样我的用户的体验就不会中断。下面是我使用的 htaccess 通配符脚本。它采用用户尝试访问的任何 URL,并将该链接镜像到另一个域。

例如, http://methodshop.NET/games/play/bubblewrap/index.shtml

会重定向到 http://methodshop.COM/games/play/bubblewrap/index.shtml

这是methodshop.net 的htaccess 脚本,它将所有methodshop.net URL 重写为methodshop.com。只需为您的域编辑它。

RewriteEngine on

RewriteRule (.*)$ http://www.methodshop.com\/$1 [R=301,L]

【讨论】:

不好。您的建议在我的服务器上导致“重定向过多”错误。 RewriteBaseRewriteCond 行在哪里?【参考方案2】:

看起来我只需将新规则移到 WordPress 部分上方即可。我还添加了一个新的,应该从 .com 域名中删除“www”。

这一切似乎都在工作。

感谢任何 cmets。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %HTTP_HOST ^blog.domain.info$ [OR]
RewriteCond %HTTP_HOST ^www.blog.domain.info$ [OR]
RewriteCond %HTTP_HOST ^www.blog.domain.com$
RewriteRule ^(.*)$ "http\:\/\/blog\.domain\.com\/$1" [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

编辑

应该注意的是,如果您更改这些 Wordpress cmets 之间包含的 htaccess 文件中的任何内容,它可能会在稍后被 Wordpress 覆盖。将您的自定义编辑移到此块之外和之上也可以工作,并且不受 Wordpress 本身对 htaccess 所做的任何更改的影响。

RewriteEngine On
RewriteBase /
RewriteCond %HTTP_HOST ^blog.domain.info$ [OR]
RewriteCond %HTTP_HOST ^www.blog.domain.info$ [OR]
RewriteCond %HTTP_HOST ^www.blog.domain.com$
RewriteRule ^(.*)$ "http\:\/\/blog\.domain\.com\/$1" [R=301,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

【讨论】:

以上是关于使用 WordPress 进行通配符域重定向的主要内容,如果未能解决你的问题,请参考以下文章

从 SSL 上的裸域重定向失败

任何国家/地区城市基域重定向

带有正则表达式通配符的 WordPress PHP 重定向

如何使用 Route 53 将裸(顶点)域重定向到 www?

带有域掩码的 WordPress 站点的 htaccess 重定向不起作用

获取 API、自定义请求标头、CORS 和跨域重定向