Apache 如何使用.htaccess删除URL的一部分

Apache 如何使用.htaccess删除URL的一部分,apache,.htaccess,magento,mod-rewrite,Apache,.htaccess,Magento,Mod Rewrite,我对重写规则有一些问题。我正在把旧的商店搬到新的商店,一些产品的路径将会改变。单一产品的旧路径是: www.example.com/page/product1.html www.example.com/page/sub-page/product1.html 每个产品(在新商店)都可以在该路径上找到: www.example.com/product1.html 在我看来,这是重定向所有产品的最好和最简单的方法。如何剪切以前链接的部分?我的规则是这样的: RewriteRule ^page/(.

我对重写规则有一些问题。我正在把旧的商店搬到新的商店,一些产品的路径将会改变。单一产品的旧路径是:

www.example.com/page/product1.html
www.example.com/page/sub-page/product1.html
每个产品(在新商店)都可以在该路径上找到:

www.example.com/product1.html
在我看来,这是重定向所有产品的最好和最简单的方法。如何剪切以前链接的部分?我的规则是这样的:

RewriteRule ^page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.+)$ /$1 [R=301,L]

RewriteRule ^page/(.+)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/(.*)$ /$1 [R=301,L]

但是每次我使用旧路径进入页面时,重定向后的链接看起来是这样的:
www.example.com/page/sub-page/product1.html
,应该
www.example.com/sub-page/product1.html
改变规则的顺序如下:

RewriteRule ^page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.+)$ /$1 [R=301,L]

RewriteRule ^page/(.+)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/(.*)$ /$1 [R=301,L]
编辑:或将其合并为一条规则:

RewriteRule ^page/(?:.+?/)?([^/]+)$ /$1 [R=301,L]

您必须像这样切换规则的位置:

RewriteRule ^page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.+)$ /$1 [R=301,L]

RewriteRule ^page/(.+)$ /$1 [R=301,L]
RewriteRule ^page/sub-page/(.*)$ /$1 [R=301,L]
RewriteRule ^page/(.*)$ /$1 [R=301,L]

“重写”模块只是沿着您的规则列表,尝试一个接一个地应用规则。您的第一条规则将与两者匹配。

仍然相同的地址
www.example.com/sub-page/product1.html
仍然相同
www.example.com/sub-page/product1.html
在新浏览器中测试它很高兴知道,我还为您提供了一条规则来处理两个重定向。以备将来需要。再次感谢阿努巴瓦:)