301 重定向不适用于子页面,未找到错误
301 redirect not working for subpage, not found error
嗨,我有一些 URL 这样的
/dvr-model/110
/dvr-model/110/spider
/dvr-model/110/spencer
/dvr-model/110/whale/47
我是这样做的
Redirect 301 /dvr-model/110 https://newurl
Redirect 301 /dvr-model/110/spider https://newurl
Redirect 301 /dvr-model/110/spencer https://newurl
Redirect 301 /dvr-model/110/whale/47 https://newurl
现在第一个重定向工作正常,但所有其他 URL 都给出未找到错误。我在这里做错了什么?
but all other URLs are giving not found error.
具体来说,如果您请求 /dvr-model/110/spider
,那么第一条规则会将请求重定向到 https://newurl/spider
(大概是 404)。
Redirect
指令是 prefix-matching,匹配后的所有内容都被复制到目标 URL 的末尾。所以在上面的例子中 /spider
被附加到目标 URL.
的末尾
您需要反转规则,以便最具体的规则排在最前面,或者至少让第一个(通用)规则排在最后。
例如:
Redirect 301 /dvr-model/110/spider https://newurl
Redirect 301 /dvr-model/110/spencer https://newurl
Redirect 301 /dvr-model/110/whale/47 https://newurl
Redirect 301 /dvr-model/110 https://newurl
或使用 RedirectMatch
,它使用正则表达式而不是简单的 prefix-matching 来匹配精确的 URL,例如:
RedirectMatch 301 ^/dvr-model/110$ https://newurl
RedirectMatch 301 ^/dvr-model/110/spider$ https://newurl
RedirectMatch 301 ^/dvr-model/110/spencer$ https://newurl
RedirectMatch 301 ^/dvr-model/110/whale/47$ https://newurl
可以使用正则表达式将其简化为单个规则交替:
RedirectMatch 301 ^/dvr-model/110(/spider|/spencer|/whale/47)?$ https://newurl
您需要在测试前清除浏览器缓存,并首先使用 302(临时)重定向进行测试以避免潜在的缓存问题。
参考:
嗨,我有一些 URL 这样的
/dvr-model/110
/dvr-model/110/spider
/dvr-model/110/spencer
/dvr-model/110/whale/47
我是这样做的
Redirect 301 /dvr-model/110 https://newurl
Redirect 301 /dvr-model/110/spider https://newurl
Redirect 301 /dvr-model/110/spencer https://newurl
Redirect 301 /dvr-model/110/whale/47 https://newurl
现在第一个重定向工作正常,但所有其他 URL 都给出未找到错误。我在这里做错了什么?
but all other URLs are giving not found error.
具体来说,如果您请求 /dvr-model/110/spider
,那么第一条规则会将请求重定向到 https://newurl/spider
(大概是 404)。
Redirect
指令是 prefix-matching,匹配后的所有内容都被复制到目标 URL 的末尾。所以在上面的例子中 /spider
被附加到目标 URL.
您需要反转规则,以便最具体的规则排在最前面,或者至少让第一个(通用)规则排在最后。
例如:
Redirect 301 /dvr-model/110/spider https://newurl
Redirect 301 /dvr-model/110/spencer https://newurl
Redirect 301 /dvr-model/110/whale/47 https://newurl
Redirect 301 /dvr-model/110 https://newurl
或使用 RedirectMatch
,它使用正则表达式而不是简单的 prefix-matching 来匹配精确的 URL,例如:
RedirectMatch 301 ^/dvr-model/110$ https://newurl
RedirectMatch 301 ^/dvr-model/110/spider$ https://newurl
RedirectMatch 301 ^/dvr-model/110/spencer$ https://newurl
RedirectMatch 301 ^/dvr-model/110/whale/47$ https://newurl
可以使用正则表达式将其简化为单个规则交替:
RedirectMatch 301 ^/dvr-model/110(/spider|/spencer|/whale/47)?$ https://newurl
您需要在测试前清除浏览器缓存,并首先使用 302(临时)重定向进行测试以避免潜在的缓存问题。
参考: