如何使用书写规则?
我需要重定向
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
。