Apache 重写:sub.DOM1.TLD1/path > sub.DOM2.TLD2/path

Apache 重写:sub.DOM1.TLD1/path > sub.DOM2.TLD2/path

...MAYBE-dup 答案确实解决了我的问题,但问题没有。

做两件事:

  1. 保留子域名

  2. 之后保持路径

.htaccess我在 SE 或其他网络上的任何地方都找不到可以同时执行这两项操作的一个Apache 配置:

通过 Apache.htaccess重写,转发旧域名,但保留两者相同subdomainpath/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指令从请求中捕获子域%1RewriteRule 代换是对捕获的子域(即([^.]+))的反向引用。

反向$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

相关内容