Htaccess将GET请求重写为另一个GET请求,另一个使用2个GET变量

时间:2012-12-30 18:13:56

标签: regex .htaccess

我有两个网址,我正在尝试重写,过去...... 4-5小时(现在头痛)。

我正在尝试重写

/arts/tag/?tag=keyword 

/search/art?keywords=keyword

看看其他问题,我就像这样重写了

RewriteRule /arts/tag/?tag=([^&]+) search/art?keywords=$1 [L,R=301,NC] 

RewriteRule ^arts/tag/?tag=$ /search/art\?keywords=%1? [L,R=301,NC]

我尝试使用反斜杠而没有,没有运气。

也试过

RewriteCond  %{QUERY_STRING} /arts/tag/?tag=([^&]+) [NC]
RewriteRule .* /search/art\?keywords=%1? [L,R=301,NC]

第二个是类似的,

/arts/category?id=1&sortby=views&featured=1

/art/moved?id=1&rearrange=view

我更改get变量名称的原因是出于我自己的学习目的,因为我没有为我的目的找到任何教程。我也改变了类别,因为类别已经改变,我必须在内部重定向一些ID#。

RewriteCond %{QUERY_STRING} id=([^&]+) [NC] // I need the path in there though, not just query string, since I'll be redirecting /blogs/category and /art/category to different places.
RewriteRule .* /art/moved/id=%1? [L,R=301,NC]

任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

假设原始网址中的查询与替换网址中的查询没有任何共同之处,也许这会做您想要的,使用查询中的第一个key作为条件并识别传入的网址:

RewriteEngine On
RewriteBase /
# First case
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING}  \btag\b
RewriteRule .* http://example.com/search/art?keywords=keyword?  [L]

会映射这个: http://example.com/arts/tag/?tag=keyword

对此: http://example.com/search/art?keywords=keyword

# Second case
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING}  \bid\b
RewriteRule .* http://example.com/art/moved?id=1&rearrange=view?  [L]

会映射这个: http://example.com/arts/category?id=1&sortby=views&featured=1

对此: http://example.com/art/moved?id=1&rearrange=view

两者都是静默映射的。如果要在浏览器的地址栏中显示新URL,请修改此[R,L]之类的标志。将R替换为R=301以进行永久重定向。