如何通过 .htaccess 动态嵌套 URL 重定向

如何通过 .htaccess 动态嵌套 URL 重定向

如何使用书写规则?

我需要重定向

www.example.com/accesories

www.example.com/accesories/item

更新:如果我使用Redirect /accesories /accesories/items我会收到:

www.example.com//accesories/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/items/

答案1

Redirect /accesories /accesories/items

是的,这将导致重定向循环,因为 mod_aliasRedirect指令是前缀匹配的,按照Apache 文档(重点突出我自己的):

...任何请求以。。。开始URL-path 将会在目标 URL 的位置向客户端返回重定向请求。匹配的 URL 路径之外的附加路径信息将附加到目标 URL。

如果你只想重定向特定的 URL,那么你需要使用RedirectMatch指令*1相反,它与正则表达式匹配。例如:

RedirectMatch ^/accesories$ /accesories/items

*1除非您已经在其他指令中使用 mod_rewrite(这就是我问“您还有什么其他指令?”的原因),在这种情况下最好使用 mod_rewrite。

“动态”-因为配件是包含产品的类别,但我不想显示wyhos产品,需要重定向到/配件/物品

我不太清楚您这是什么意思,但如果需要重定向/accesories/<products>/accesories/items,其中<products>可以是任何单个路径段,除了items那么您需要在RedirectMatch指令中使用负向前瞻执行类似以下操作(或使用 mod_rewrite)。例如:

RedirectMatch ^/accesories(/(?!items)[^/]*)?$ /accesories/items

上述操作将/accesories/accesories/和重定向到/accesories/<anything>,但不会/accesories/items(因为这会创建重定向循环)到/accesories/items

请注意,这些是 302(临时)重定向。(始终使用 302 进行测试以避免潜在的缓存问题,并且仅在有此意图时才稍后更改为 301。)

指令的顺序.htaccess可能很重要。外部重定向通常需要放在文件顶部附近.htaccess

相关内容