我正在尝试将子域的所有页面重定向到主域,同时仍保留路径。例如,
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 On
和RewriteBase /
,但无论如何我都试图再次包含它们,结果相同。
当我从子域(例如: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
这解决了重写页面资源而不是基础文档的问题。但是,我现在面临着根本无法访问我的子域的问题。