如何将平面链接重写为动态链接并保留查询字符串?

时间:2010-04-28 00:16:03

标签: .htaccess mod-rewrite url-rewriting

我想重写一个网址,如: http://my.project/mydomain.com/ANY_NUMBER_OF_CATEGORIES/designer/4/designer-name/page.html
对此:
http://my.projects/mydomain.com/ANY_NUMBER_OF_CATEGORIES/page.html?designer=4

我想使用mod-rewrite来实现这一目标。

注意事项:

  1. “mydomain.com/”和“/ designer”之间可以有任意数量的类别。
    1. 例如,网址可以是http://my.project/mydomain.com/designer/4/designer-name/page.html,也可以是http://my.project/mydomain.com /tops/shirts/small/designer/4/designer-name/page.html
  2. 可以在原始URL中提供需要保留在重写的URL中的查询字符串。
    1. 例如,提供的网址可能是:http://my.project/mydomain.com/designer/4/designer-name/page.html?color = red& type = shirt
    2. 鉴于结果网址上方的网址需要:http://my.projects/mydomain.com/page.html?designer = 4& color = red& type = shirt
    3. 查询字符串的顺序无关紧要。 'designer = 4'部分可以在查询字符串的其余部分之前或之后出现。
  3. 我是.htaccess的新手并重新编写,所以任何例子或解释都会非常感激。非常感谢你。

2 个答案:

答案 0 :(得分:1)

在.htaccess文件中尝试此操作:

RewriteEngine on
RewriteRule ^(.+/)?(\d+)/[^/]+/([^/]+\.html)$ $1$3?designer=$2 [L,QSA]

答案 1 :(得分:0)

我最终必须创建两个单独的RewriteRules:

RewriteRule ^designer/([^/]+)/.*/([^/]+)\.html $2.html?designer=$1 [NC,L,QSA]
RewriteRule (.*)/designer/([^/]+)/.*/([^/]+)\.html $1/$3.html?designer=$2 [NC,L,QSA]

感谢Gumbo指出了重写的[QSA]部分。