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 中明确包含方案 + 主机名,因为这是默认设置。
我正在尝试将旧页面从我重新设计的网站重定向到新页面,但它不起作用。
这是我在 .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 中明确包含方案 + 主机名,因为这是默认设置。