首页 > 解决方案 > 将域重定向到特定页面,而不是来自该域的页面

问题描述

我正在将具有域映射的多站点 Wordpress 网站移动到单个安装。
为此,我希望旧映射域(domainA.com、domainB.com 等)引用新域上的特定页面(因此,newdomain.com/domainA、newdomain.com/domainB 等)但我也想要旧域的原始页面转到新网站上的页面(domainA.com/page 应该成为 newdomain.com/page),我希望它显示新的 url,而不是栏中的旧 url。这是我正在努力的部分。
我怀疑我可以在 htaccess 中手动完成这一切,但是其中一个网站需要在 htaccess 中以这种方式重写 80 多个页面,我认为这不是最好的计划。

目前,newdomain 和 domainA 都在同一个主机上,domainA 是 newdomain 的别名。在此设置中,我设法将 domainA.com 引用到 newdomain.com/domainA,并将其正确显示为 url,但如果我转到 domainA.com/page,它会将访问者发送到网站上的正确页面( newdomain.com/page) 但它没有显示正确的 url,它仍然会显示原始 url (domainA.com/page)。
如果我将别名转换为域指针,它将 domainA.com 指向 newdomain.com 的主页,而不是我希望它转到的特定页面,但是当转到特定页面时它确实显示了正确的 url,这是正常的域指针行为。但这并不能解决问题。

这是我正在使用的当前代码:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} ^(www\.)?domainA\.com$
RewriteRule ^(.*)$ http:/www.newdomain.com/domainA/$1 [R=301,L]
# END WordPress

我希望去 domainA.com 的人被发送到 newdomain.com/domainA/ 而去 domainA.com/page 的人被发送到 newdomain.com/page 并且 newdomain url 显示在栏中。就目前而言,我似乎只能执行两者之一,具体取决于 domainA 设置为别名还是域指针。

根据 Misorude 在下面的第一条评论,我更改了代码,其余部分与上面完全相同,它也仍在同一位置:

RewriteCond %{HTTP_HOST} ^(www\.)?domainA\.com$
RewriteRule ^$ /domainA/ [R=301,L]

现在的输出是 domainA.com/domainA/,虽然它显示了 newdomain.com/domainA 的页面,但栏中的 url 显示了旧域。
在重写中使用完整 url 只需将总 url 添加到 domainA url 后面,当然会给出错误,因为它不存在。

完整的当前代码:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} ^(www\.)?domainA\.com$
RewriteRule ^$ http://www.newdomain.com/domainA/ [R=301,L]
# END WordPress

这会将访问者从 domainA.com 发送到 domainA.com/http:/www.newdomain.com/domainA/。

标签: phpwordpress.htaccess

解决方案


这是我修复代码的方法:

RewriteEngine On
#send only the base url of domainA to specific link
RewriteCond %{HTTP_HOST} ^(www\.)?domainA\.com [NC]
RewriteRule ^$ http://www.newdomain.com/domainA/ [R=301,L]
#Send all non-newdomain links to the specific page on the newdomain website
#while showing newdomain as the proper website
RewriteCond %{HTTP_HOST} !^(www\.)?newdomain\.com$ [NC]
RewriteRule (.*) http://www.newdomain.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

这允许在不做额外工作的情况下轻松添加要重新路由的额外域。


推荐阅读