301 重定向 - 根文件夹和子文件夹的不同位置

Posted

技术标签:

【中文标题】301 重定向 - 根文件夹和子文件夹的不同位置【英文标题】:301 Redirect - Different Location for Root and Subfolders 【发布时间】:2019-08-28 01:15:34 【问题描述】:

我有一个域,我想在 htaccess 上使用 301 重定向重定向到新域;我成功地做到了,但现在的问题是,我想将旧域的页面/文件夹重定向到新域的各个位置。例如

www.olddomain.com 重定向到 www.newdomain.com(有效) www.olddomain.com/about 应该重定向到 www.newdomain.com/who-we-are(不起作用)

我尝试在我的 htaccess 上重定向 301 oldurl newurl 但它不起作用,因为 root 已经重定向到新域。

有什么办法可以解决这个问题吗?

【问题讨论】:

请将您当前的动态配置文件(“.htaccess”)添加到问题中,以便其他人可以指出需要进行哪些更改。 【参考方案1】:

当然,您的要求是可能的。如果事情不适合您,很可能您的规则顺序有问题。您需要记住,规则是从上到下处理的。所以更专业、更详细的规则必须先出现,更一般的规则再往下。

这是您给出的单个示例的示例:

RewriteEngine on

# this is a specialized rule for a specific resource
RewriteCond %HTTP_HOST ^olddomain\.com$
RewriteRule ^/about/?$ https://newdomain.com/who-we-are [R=301]

# this acts as a fallback for a  request not yet redirected
RewriteCond %HTTP_HOST ^olddomain\.com$
RewriteRule ^/?$ https://newdomain.com/ [R=301]

最好先从 302 临时重定向开始,稍后再将其更改为 301 永久重定向,前提是您确定一切都已正确设置。这样可以防止在尝试时出现缓存问题...

这些规则同样适用于 http 服务器主机配置或动态配置文件(“.htaccess”文件)。显然重写模块需要在http服务器内部加载并在http主机中启用。如果您使用动态配置文件,您需要注意它的解释在主机配置中完全启用,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

【讨论】:

【参考方案2】:

你可以用这个:

RewriteEngine on

#redirect specific pages to specific location on new domain
RewriteCond %HTTP_HOST ^(www\.)?oldDomain\.com$ [NC]
RewriteRule ^/?about/?$ http://newDomain.com/who-we-are [NC,L,R=301]
#redirect the old domain root to new domain
RewriteCond %HTTP_HOST ^(www\.)?oldDomain\.com$ [NC]
RewriteRule ^/?$ http://newDomain.com/$1 [NC,L,R=301]

如果您的域(旧的和新的)位于不同的服务器上或指向同一服务器上的不同文档根目录,您可以删除上述两个规则中的 %HTTP_HOST 条件。

【讨论】:

【参考方案3】:

谢谢大家,问题已解决。

    RewriteEngine on
    RewriteCond %HTTP_HOST hitechos\.com [NC]
    RewriteCond %REQUEST_URI ^/$
    Rewriterule ^(.*)$ https://www.hitechdigital.com/ [L,R=301]

问候 马诺吉索尼

【讨论】:

以上是关于301 重定向 - 根文件夹和子文件夹的不同位置的主要内容,如果未能解决你的问题,请参考以下文章

IIS 301 从子文件夹重定向到根文件夹

站点核心 301 重定向 iis 7

将 301 从目录重定向到单个文件

PHP 301 重定向位置 URI 格式

.htaccess 中的 301 重定向将旧文件路径/名称附加到新 url

通过 htaccess 将 index.html 和所有 http、https、www 和非 www 版本的主页 URL 重定向到 https://www 根 URL 的 301