...MAYBE-dup 答案确实解决了我的问题,但问题没有。
做两件事:
保留子域名
之后保持路径
.htaccess
我在 SE 或其他网络上的任何地方都找不到可以同时执行这两项操作的一个Apache 配置:
通过 Apache.htaccess
重写,转发旧域名,但保留两者相同subdomain
和path/after
。
从:
samesubdomain.
domain1.tld1
/same/path
到:
samesubdomain.
domain2.tld2
/same/path
我有许多子域名和尾随地址。我正在迁移一个旧网站,但需要我的旧子域名及其页面在新域名上仍然有效。
不完全重复但非常接近:(答案解决了我的问题,但问题本身并没有描述我的问题,但这也解决了我的问题。)
图片来源:可能重复答案,对于子域名,我目前有:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+\.)?domain1.com$ [NC]
RewriteRule ^ http://%1domain2.com%{REQUEST_URI} [R=301,L]
...现在,我需要添加the/path
一半,但不能与此代码冲突。
答案1
尽管链接的问题没有明确说明这一点,但代码确实也复制了 URL 路径(以及任何查询字符串)。尽管答案确实缺乏任何解释。
假设:
- 总是有一个子域名。因此,您不想重定向域名顶点。即
domain1.tld1
(没有子域名)不会重定向到domain2.tld2
。
靠近根文件的顶部.htaccess
:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain1\.tld1 [NC]
RewriteRule (.*) https://%1.domain2.tld2/$1 [R=302,L]
该RewriteCond
指令从请求中捕获子域%1
。RewriteRule
代换是对捕获的子域(即([^.]+)
)的反向引用。
反向$1
引用包含 URL 路径,由RewriteRule
图案, IE。(.*)
。
请注意,我特意省略$
了条件模式为了匹配以点结尾的 FQDN。
任何查询字符串均会不变地传递。
请注意,目前这是 302(临时)重定向。请始终使用 302 进行测试以避免缓存问题。如果您之前使用 301 进行测试,则需要确保已清除浏览器缓存。
RewriteEngine On RewriteCond %{HTTP_HOST} ^(.+\.)?domain1.com$ [NC] RewriteRule ^ http://%1domain2.com%{REQUEST_URI} [R=301,L]
...现在,我需要添加/path一半而不与此代码冲突。
%{REQUEST_URI}
代码中已经包含了 URL 路径部分。这就是RewriteRule
代换字符串。REQUEST_URI
服务器变量包含完整的 URL 路径。这只是做与上面相同的事情的另一种方式 - 我改用反向引用$1
。(请注意,REQUEST_URI
服务器变量包含斜杠前缀,而我使用的反向引用不包含,因此斜杠在代换细绳。)
此代码在文字点上缺少反斜杠转义.com
。
请注意,此解决方案使子域选修的。它将重定向domain1.com
(无子域)至domain2.com
。