HTACCESS 301 重定向不断发送到错误的页面

HTACCESS 301 redirect keep sending to the wrong page

我正在尝试将旧页面从我重新设计的网站重定向到新页面,但它不起作用。

这是我在 .htaccess 文件中关于该域的 2 行代码:

Redirect 301 /deaneco http://solutionsgtr.ca/fr/deaneco/accueil.html
RewriteRule ^/deaneco/contact http://solutionsgtr.ca/fr/deaneco/contact.html [R=301,L,QSA]

如果继续 solutionsgtr.ca/deaneco/contact URL,它会显示以下页面:

http://solutionsgtr.ca/fr/deaneco/accueil.html/contact

虽然第一条规则有效(deaneco/solutionsgtr.ca/fr/deaneco/accueil.html)。

我觉得这两行混合在一起,给我错误的页面,该页面不存在,所以我收到 404 错误。

这里有几个问题:

  • Redirect 指令(mod_alias 的一部分)是 prefix-matching 并且匹配后的所有内容都附加在目标结束 URL。这解释了您看到的重定向。

  • RewriteRule (mod_rewrite) 模式 ^/deaneco/contact 永远不会在 .htaccess 上下文中匹配因为匹配的 URL-path 不以斜杠开头。所以,这条规则目前没有做任何事情。

您应该避免混合来自两个模块的重定向,因为它们在请求期间独立执行并且在不同时间执行(mod_rewrite 先执行,尽管指令的顺序很明显)。

要么使用 mod_alias,首先对最具体的指令进行排序:

Redirect 301 /deaneco/contact http://solutionsgtr.ca/fr/deaneco/contact.html
Redirect 301 /deaneco http://solutionsgtr.ca/fr/deaneco/accueil.html

注意:您需要清除浏览器缓存,因为错误的 301(永久)重定向将被浏览器缓存。使用 302(临时)重定向进行测试以避免潜在的缓存问题。

或者,如果您已经将 mod_rewrite 用于其他 redirects/rewrites,则考虑使用 mod_rewrite(以避免上述潜在冲突):

RewriteEngine On

RewriteRule ^deaneco/contact$ http://solutionsgtr.ca/fr/deaneco/contact.html [R=301,L]
RewriteRule ^deaneco$ http://solutionsgtr.ca/fr/deaneco/accueil.html [R=301,L]

不需要 QSA 标志,因为查询字符串默认传递给 substitution

RewriteRule 指令的顺序在这种情况下并不重要,因为它们只匹配特定的 URL。


If go on the solutionsgtr.ca/deaneco/contact URL

如果您要重定向到同一主机,则无需在目标 URL 中明确包含方案 + 主机名,因为这是默认设置。