301从子域重定向到主域不适用于路径

时间:2020-10-31 03:43:43

标签: regex wordpress .htaccess redirect netlify

我正在尝试将子域的所有页面重定向到主域,同时仍保留路径。例如,

cms.mywebsite.com/services => mywebsite.com/services

我尝试使用this StackOverflow answer的答案,并将以下内容添加到我的.htaccess文件中:

RewriteCond %{HTTP_HOST} cms.mywebsite.ca$ [NC]
RewriteRule ^(.*)$ https://mywebsite.ca/$1 [L,R=301]

这两行是.htaccess文件的最后两行。该文件位于public_html中的WordPress安装旁边。没什么可看的。

这两行是自动生成的WP代码:

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

我认为没有必要重复RewriteEngine OnRewriteBase /,但无论如何我都试图再次包含它们,结果相同。

当我从子域(例如:cms.mywebsite.com/services)请求页面时,结果是主文档URL不变,但是页面所依赖的所有资源均已正确重写。因此,所有脚本和CSS都是从mywebsite.com请求的,但是主文档仍然是cms.mywebsite.com

奇怪的是,如果我请求的页面没有路径参数,则重定向有效。因此cms.mywebsite.com正确地重定向到mywebsite.com。只有附加其他路径参数,我才能获得上述结果。

我还要注意,我正在使用Netlify,该网站托管我的主站点并处理一些DNS记录; Netlify允许您使用自定义域而不是它们的自动生成的子域,我使用DNS设置对其进行了设置。我还在Netlify DNS中设置了一个记录,该记录将cms.mywebsite.com作为A record,并将其定向到容纳我的WordPress网站的服务器的IP地址(但是,我认为这不是连接的我的问题)。

此A记录使我可以在Netlify's redirects file中设置自定义重定向,该重定向将自定义路径重定向到我的WordPress网站(允许我登录到WP的后端)。

例如:

// _redirects (Netlify redirects file)

/my-sign-in-path   https://cms.mywebsite.com/wp-admin 200

自从执行了上面指定的.htaccess规则以来,我不能再使用mywebsite.com/my-sign-in-path来访问https://cms.mywebsite.com/wp-admin。它重定向到我的主站点上不存在的mywebsite.com/wp-admin

所以我想我需要修改.htaccess文件以同时排除my-sign-in-path(我尚不知道如何做),并弄清楚为什么我的基本URL不正确在页面资源被覆盖时被重写。

知道我在做什么错吗?我要使用Redirect而不是Rewrites的规则吗?如果是这样,该如何使用通配符为路径进行301重定向,类似于对$1变量使用ReWrite规则?

更新

所以我用这一行代码解决了一半:

RedirectMatch 301 ^(.*)$ https://mywebsite.com/$1

这解决了重写页面资源而不是基础文档的问题。但是,我现在面临着根本无法访问我的子域的问题。

0 个答案:

没有答案