RewriteCond %{HTTP_HOST} ^old\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.old\.com$
RewriteRule ^/?$ "https\:\/\/subdomain\.domain\.com\/" [R=301,L]
这些仅重定向主页(根目录)。要将任何 URL 路径重定向到目标处的同一 URL 路径,请改用以下命令:
RewriteCond %{HTTP_HOST} ^(www\.)?old\.com [NC]
RewriteRule ^ https://subdomain.domain.com%{REQUEST_URI} [R=301,L]
我把你的两个结合起来了状况.
请注意,语法是%{REQUEST_URI}
(有一个%
前缀)来引用REQUEST_URI
服务器变量。否则,“{REQUEST_URI}”只是文字文本。
不需要反斜杠转义所有这些字符代换 string.
测试前清除浏览器缓存。最好使用 302(临时)重定向进行测试,以避免潜在的缓存问题。
我添加了以下规则,该规则部分起作用,后面的斜杠
域名丢失。现在重定向是https://subdomain.domain.compage1
代替https://subdomain.domain.com/page1
RewriteRule ^ https\:\/\/subdomain\.domain\.com\/{REQUEST_URI} [L,R=301]
除了上述指令不可能做到这一点之外 - 您可能会看到由于早期错误重定向而导致的缓存响应。 301(永久)重定向由浏览器永久缓存。始终使用 302(临时)重定向进行测试,最好禁用浏览器开发工具的浏览器缓存(“网络”选项卡上的选项)。
替代解决方案
这需要深入根部.htaccess
文件(如果它位于子目录中,则它将不起作用.htaccess
,与上面的规则不同)。
RewriteCond %{HTTP_HOST} ^(www\.)?old\.com [NC]
RewriteRule (.*) https://subdomain.domain.com/$1 [R=301,L]
这使用反向引用而不是REQUEST_URI
服务器变量。
此重定向需要靠近顶部.htaccess
文件,位于大多数其他指令之前。
确保在测试之前已清除浏览器缓存。