从 shop.domain.com 到 www.domain.com (.htaccess - mod_rewrite)

From shop.domain.com to www.domain.com (.htaccess - mod_rewrite)

我可以用 mod_rewrite 做到这一点吗?

示例 1 从 Url shop.domain.com/dir/dir1/Products/skuproduct123456 到 www.domain.com/products/skuproduct123456

示例 2 从 Url shop.domain.com/dir/dir1/pages/namepage/123456 到 www.domain.com/collections/namepage-123456

谢谢

你问的问题听起来很直截了当。您只需改编您可以在此处找到的许多现有示例中的任何一个...

然而,有两种选择:

首先通常的事情是外部重定向这样的请求:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^shop\.example\.com$
RewriteRule ^/?dir/dir1/Products/skuproduct123456 https://www.example.com/products/skuproduct123456 [R=301,L]

RewriteCond %{HTTP_HOST} ^shop\.example\.com$
RewriteRule ^/?dir/dir1/pages/namepage/123456 https://www.example.com/collections/namepage-123456 [R=301,L]

最好从 R=302 临时 重定向开始,然后仅将其更改为 R=301 永久 一切正常后重定向。

那么也可能是您实际上想要在内部重写 那些请求...这有点复杂。如果两个主机都由同一个 http 服务器提供服务,那么事情又很容易了,假设两个主机共享相同的 DOCUMENT_ROOT(否则您需要相应地调整路径):

RewriteEngine on

RewriteCond %{HTTP_HOST} ^shop\.example\.com$
RewriteRule ^/?dir/dir1/Products/skuproduct123456 /products/skuproduct123456 [END]

RewriteCond %{HTTP_HOST} ^shop\.example\.com$
RewriteRule ^/?dir/dir1/pages/namepage/123456 /collections/namepage-123456 [END]

如果两台主机都由单独的 http 服务器提供服务,您唯一的选择就是使用代理模块。这也可以从重写模块中进行。由于在这种情况下网络路由的设置方式,这会带来巨大的性能损失...

所有方法不仅可以用于您实现的静态文字路径,还可以使用正则表达式作为模式以更通用的方式实现。确切的规则取决于您在这种情况下的 URL 的实际结构,您没有真正命名。


一般来说,在实际的 http 服务器的主机配置中实施此类规则是个好主意。您也可以使用分布式配置文件(通常命名为“.htaccess”),但这也有缺点。它仅在您无法控制 http 服务器配置的情况下作为最后的手段提供(阅读:廉价的网络托管服务提供商)。