php - 将域重定向到特定页面,而不是来自该域的页面
问题描述
我正在将具有域映射的多站点 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/。
解决方案
这是我修复代码的方法:
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
这允许在不做额外工作的情况下轻松添加要重新路由的额外域。
推荐阅读
- c# - Visual Studio 中的调试日志文件位置运行 .NET 应用程序
- excel - VBA 循环仅适用于前两张纸 - 如何修复?
- neo4j - Neo4j/GraphQL - 获取链表中的最后一个节点,以便使用新创建的节点继续链表
- bootstrap-4 - Bootstrap4编译的css和js文件
- node.js - Babel 没有转译 nodejs 模块
- linux - 如何使用 ssh heredoc 删除 bash 中的多个文件?
- javascript - L.heatLayer 不是函数
- python - 熊猫数据框:随着时间的推移整合会产生奇怪的结果
- python - 如何在 PyQt 中嵌入 Schemdraw
- javascript - 是在订阅中订阅还是使用 rxjs concat 更好?