Php 将域重定向到特定页面,但不重定向来自该域的页面

Php 将域重定向到特定页面,但不重定向来自该域的页面,php,wordpress,.htaccess,Php,Wordpress,.htaccess,我正在将具有域映射的多站点Wordpress网站移动到单个安装。 为此,我希望旧映射域(domainA.com、domainB.com等)引用新域上的特定页面(因此,newdomain.com/domainA、newdomain.com/domainB等),但我也希望旧域的原始页面转到新网站上的页面(domainA.com/page应成为newdomain.com/page),并希望它显示新的url,不是酒吧里的旧网址。这是我正在努力解决的问题。 我想,我可以在htaccess中手动完成这一切,

我正在将具有域映射的多站点Wordpress网站移动到单个安装。
为此,我希望旧映射域(domainA.com、domainB.com等)引用新域上的特定页面(因此,newdomain.com/domainA、newdomain.com/domainB等),但我也希望旧域的原始页面转到新网站上的页面(domainA.com/page应成为newdomain.com/page),并希望它显示新的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是设置为alias还是设置为domain指针

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

RewriteCond %{HTTP_HOST} ^(www\.)?domainA\.com$
RewriteRule ^$ /domainA/ [R=301,L]
此项的输出现在为domainA.com/domainA/,同时显示newdomain.com/domainA页面,但栏中的url显示旧域。
在重写中使用完整url只需将总url添加到DomainaURL后面,当然会出现错误,因为它不存在

完整当前代码:

# 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
重新编写引擎打开
#仅将domainA的基本url发送到特定链接
重写cond%{HTTP_HOST}^(www\)?domainA\.com[NC]
重写规则^$http://www.newdomain.com/domainA/ [R=301,L]
#将所有非newdomain链接发送到newdomain网站上的特定页面
#同时将newdomain显示为适当的网站
重写cond%{HTTP_HOST}^(www\)?newdomain\.com$[NC]
重写规则(.*)http://www.newdomain.com/$1[R=301,L]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

这允许轻松添加要重新路由的额外域,而无需做额外的工作。

如果请求的URL路径仅为
/
,则只需重定向到
newdomain.com/domainX/
。由于在.htaccess上下文中,前导斜杠已经从中剥离,因此您希望以空路径为目标:
RewriteRule^$…
追加$1没有什么意义,因为您希望以不同的方式处理任何不只是
/
请求的内容。您希望将
domainA.com/page
重定向到
newdomain.com/page
-那么
domainB.com/page
也是这样吗?然后使用重写条件检查请求的主机名是否不是
newdomain.com
,并遵循与所有内容匹配的重写规则
(.*)
,然后根据您的第一条评论重写到
newdomain.com/$1
@misorude,现在使用它可以将url变成
domainA.com/newdomain.com/domainA
,或者变成
domainA.com/domainA
,但不是url中的
newdomain.com/domainA
(它进入页面,但不显示正确的url)。您能显示您尝试的确切代码吗?(请将其编辑到问题中,在评论中,扩展代码很难阅读。)@misorude我已将新代码和新结果添加到问题中。