使用 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]
【讨论】:
不好。您的建议在我的服务器上导致“重定向过多”错误。RewriteBase
或 RewriteCond
行在哪里?【参考方案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 进行通配符域重定向的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Route 53 将裸(顶点)域重定向到 www?