htaccess重定向使用RewriteCond和RewriteRule - 使用正则表达式的复杂URL

时间:2012-09-22 19:40:49

标签: regex .htaccess mod-rewrite redirect rewrite

我需要使用htaccess创建301重定向。

示例:

拿这个网址(旧):domain / page.html?pid = 21& cid = 730:pagetitle

重定向到(新):http://www.domain.co.uk/page/section/pagetitle

我试过这个,但是不行:(

##([0-9]+)?
RewriteCond %{QUERY_STRING} pid=21&cid=[0-9]{1,5}:(.*)
RewriteRule ^/page.html http://www.domain.co.uk/page/section/%1? [NC,R=301]

pagetitle和cid是动态的,会随着时间而改变。

理想情况下,我想使用旧网址并将所有内容与pagetitle(domain / page.html?pid = 2& cid = 730:pagetitle)分开,然后将其用作我的重定向网址的查询字符串.... / p>

感谢

更新:

更多示例:

自:

http://www.domain.co.uk/page.html?pid=1&cid=25:helloworld

http://www.domain.co.uk/page.html?pid=1&cid=34:hellonew-world

http://www.domain.co.uk/page.html?pid=1&cid=21:1pagetitle

要:

http://www.domain.co.uk/page/section/helloworld

http://www.domain.co.uk/page/section/hellonew-world

http://www.domain.co.uk/page/section/1pagetitle

注意:section = pid 1

使用Omega或Mine重写规则的结果现在提供404页面。

我只需要查询字符串的最后一部分 - cid(页面标题),pid并不重要。

2 个答案:

答案 0 :(得分:0)

要保留查询字符串参数,而不是[NC,R=301]使用[NC,R=301,QSA]

RewriteCond %{QUERY_STRING} cid=[0-9]{1,5}:(.*)
RewriteRule ^/?page\.html$ http://www.domain.co.uk/page/section/%1 [NC,R=301,QSA]

答案 1 :(得分:0)

我认为使用{1,5}可能是您的版本中的问题。该语法可能无法使用。

但是这个版本应该可以正常工作:

RewriteCond  %{QUERY_STRING}  ^pid=21&cid=[0-9]+:(.*)$
RewriteRule  ^page\.html      http://www.domain.co.uk/page/section/%1 [NC,R=301,L]