如何在 htaccess 中的某个 URL 之后使用通配符重定向所有内容?
How can I wildcard redirect everything after a certain URL in htaccess?
我们最近对我们的一个网站进行了更改,其中大量 URL 需要通过 htaccess 重定向,但我们还需要考虑可能附加在 URL.
我可以获得特定的 URL 以按预期进行重定向,但之后无法使用其他字符。我知道有时候文件中的顺序规则很重要,比如 提到的,但这些重定向不应该有任何冲突的规则。
这些都是特定的 URL,因此 关于匹配 URL 结构中的特定单词对我们的问题不起作用。
看来FOO/BAR/BAZ到FOO/NEW/BAZexample也不适用。
我认为我们的缓存可能会影响它,但其他更改已立即实施,所以我认为这只是语法问题
我们 htaccess 中的当前格式示例 URL:
Redirect 301 /product/product-name/ https://example.com/announcements/
需要发生什么: 人们为 /product/product-name/ 提供的任何传入直接链接,包括尾部斜杠后的任何内容,例如 /product/product-name/ref /123/ 也应该重定向到 /announcements/ 但事实并非如此,这些类型的链接将转到我们的 404 页面。
尝试的解决方案:到目前为止(今天-这不是我第一次尝试这个),我已经尝试了以下方法来通配我的 301,但没有成功:
所以问题:Wildcard redirect at end of url in .htaccess
所以问题:Wildcard RewriteRule for 301 redirects in htaccess
我乐于接受建议并感谢任何建议!
Redirect 301 /product/product-name/ https://example.com/announcements/
mod_alias Redirect
指令是 prefix-matching 并且匹配后的所有内容都被复制到目标 URL 的末尾。因此,例如,对 /product/product-name/ref/123/
的请求将被重定向到 https://example.com/announcements/ref/123/
(因为 ref/123/
是 URL-path 在与 /product/product-name/
匹配后剩下的)。它似乎是目标 URL,即。 https://example.com/announcements/ref/123/
,这导致了 404,因此重定向 正在 发生。
要将 /product/product-name/<anything>
重定向到 https://example.com/announcements/
才需要使用 RedirectMatch
指令,它使用正则表达式匹配,而不是简单的 prefix-matching.
例如:
RedirectMatch 301 ^/product/product-name/ https://example.com/announcements/
这将重定向如下:
/product/product-name/
到 https://example.com/announcements/
/product/product-name/ref/123/
到 https://example.com/announcements/
/product/product-name/<anything>
到 https://example.com/announcements/
如果您需要更具体,例如。只匹配可选的附属链接,例如。 /ref/<number>/
,而不是字面上的 anything,然后改为执行类似以下的操作:
RedirectMatch 301 ^/product/product-name/(ref/\d+/)?$ https://example.com/announcements/
如评论中所述,您应该首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。并且您需要在测试前清除浏览器缓存,因为错误的 301(永久)重定向将被浏览器缓存。
但是,如果您已经在配置文件的其他地方使用了 mod_rewrite (RewriteRule
) 指令,那么您可能需要(或更可取)使用 mod_rewrite 进行此重定向相反。
参考:
我们最近对我们的一个网站进行了更改,其中大量 URL 需要通过 htaccess 重定向,但我们还需要考虑可能附加在 URL.
我可以获得特定的 URL 以按预期进行重定向,但之后无法使用其他字符。我知道有时候文件中的顺序规则很重要,比如
这些都是特定的 URL,因此
看来FOO/BAR/BAZ到FOO/NEW/BAZexample也不适用。
我认为我们的缓存可能会影响它,但其他更改已立即实施,所以我认为这只是语法问题
我们 htaccess 中的当前格式示例 URL:
Redirect 301 /product/product-name/ https://example.com/announcements/
需要发生什么: 人们为 /product/product-name/ 提供的任何传入直接链接,包括尾部斜杠后的任何内容,例如 /product/product-name/ref /123/ 也应该重定向到 /announcements/ 但事实并非如此,这些类型的链接将转到我们的 404 页面。
尝试的解决方案:到目前为止(今天-这不是我第一次尝试这个),我已经尝试了以下方法来通配我的 301,但没有成功:
所以问题:Wildcard redirect at end of url in .htaccess
所以问题:Wildcard RewriteRule for 301 redirects in htaccess
我乐于接受建议并感谢任何建议!
Redirect 301 /product/product-name/ https://example.com/announcements/
mod_alias Redirect
指令是 prefix-matching 并且匹配后的所有内容都被复制到目标 URL 的末尾。因此,例如,对 /product/product-name/ref/123/
的请求将被重定向到 https://example.com/announcements/ref/123/
(因为 ref/123/
是 URL-path 在与 /product/product-name/
匹配后剩下的)。它似乎是目标 URL,即。 https://example.com/announcements/ref/123/
,这导致了 404,因此重定向 正在 发生。
要将 /product/product-name/<anything>
重定向到 https://example.com/announcements/
才需要使用 RedirectMatch
指令,它使用正则表达式匹配,而不是简单的 prefix-matching.
例如:
RedirectMatch 301 ^/product/product-name/ https://example.com/announcements/
这将重定向如下:
/product/product-name/
到https://example.com/announcements/
/product/product-name/ref/123/
到https://example.com/announcements/
/product/product-name/<anything>
到https://example.com/announcements/
如果您需要更具体,例如。只匹配可选的附属链接,例如。 /ref/<number>/
,而不是字面上的 anything,然后改为执行类似以下的操作:
RedirectMatch 301 ^/product/product-name/(ref/\d+/)?$ https://example.com/announcements/
如评论中所述,您应该首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。并且您需要在测试前清除浏览器缓存,因为错误的 301(永久)重定向将被浏览器缓存。
但是,如果您已经在配置文件的其他地方使用了 mod_rewrite (RewriteRule
) 指令,那么您可能需要(或更可取)使用 mod_rewrite 进行此重定向相反。
参考: