我有两个网址,我正在尝试重写,过去...... 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]
任何帮助将不胜感激。谢谢。
答案 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
以进行永久重定向。