【问题标题】:How to redirect urls after deep level folder name change using rewrite rule如何在使用重写规则更改深层文件夹名称后重定向 url
【发布时间】:2015-07-10 14:57:03
【问题描述】:
我们的网站跨越多种语言(共 16 种),因此网址的开头可以包含 16 个不同的子文件夹。我们在 lang/locale 文件夹之外有一个已更改名称的子文件夹,所以我想知道如何重定向到涉及新子文件夹名称的 url,同时还重定向到 16 个不同的 lang/locale 子文件夹?
以下是旧网址和新网址的示例:
旧网址:
www.something.com/en_US/product/family/parent/child.html
www.something.com/ru_RU/product/family/parent/child/model.html
新网址:
www.something.com/en_US/product/family/parent/child2.html
www.something.com/ru_RU/product/family/parent/child2/model.html
【问题讨论】:
标签:
regex
apache
http-status-code-301
url-redirection
【解决方案1】:
RewriteEngine On
RewriteRule ^([a-zA-Z]{2}_[a-zA-Z]{2})/product/family/parent/([\w_]+)\.html$ /${1}/product/family/parent/${2}2.html
RewriteRule ^([a-zA-Z]{2}_[a-zA-Z]{2})/product/family/parent/([\w_]+)/([\w_]+)\.html$ /${1}/product/family/parent/${2}2/${3}.html
这可能对你有用,假设你真的想将 child_folder 重命名为 child_folder2(bikes -> bikes2、barbies -> barbies2 等)。
如果您的目标更复杂(bikes -> bicycles、barbies -> dolls),则需要通过服务器端编程语言来处理,但 htaccess 可以提供帮助.你可以做类似的事情
RewriteEngine On
RewriteRule ^([a-zA-Z]{2}_[a-zA-Z]{2})/product/family/parent/(child)\.html$ director.php?lang=${1}&old=${2}
但是,如果直接的正则表达式解决方案是合适的,您应该避免这样做,因为没有必要同时涉及两者,并且在已经涉及一个的情况下会增加服务器上的负载。