0

我有两个 url 我正在尝试重写,过去...... 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]

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

4

1 回答 1

1

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

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]。替换RR=301永久重定向。

于 2012-12-30T22:52:51.050 回答