我正在转换包含以下参数的旧网站:
oldpage.cfm?c=xxx&p=yyy
oldpage.cfm?c=xxx&cpage=yyy
oldpage.cfm?c=xxx&i=yyy
我想要它以便所有这些都将重新写入/ newfolder / xxx
RewriteRule ^oldpage\.cfm?c=([A-Za-z0-9-_]+)?&(p|cpage|i)=(A-Za-z0-9)$ /newfolder/$1 [R=301,NC]
但它没有重写。我之后会重新编写规则,这将取/ newfolder / $ 1并更改为newpage.htm?c = $ 1
RewriteRule ^newfolder/([A-Za-z0-9-_\s]+)/?$ newpage.htm?c=$1 [NC]
如果用户使用/ newfolder / xxx
,则可以使用此功能无法弄清楚第一次重写有什么问题?
答案 0 :(得分:0)
RewriteRule没有"看"查询字符串。它只能看到请求的URI。要使用查询字符串执行操作,您需要使用RewriteCond扩充规则。有关此主题的详细处理,请参阅http://wiki.apache.org/httpd/RewriteQueryString。
特别是,您要做的事情如下:
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/path /path/%1/%2?
答案 1 :(得分:0)
除newfolder/...
的新规则
Options -MultiViews
RewriteEngine On
RewriteCond %{QUERY_STRING} (?:^|&)c=([^&]+) [NC]
RewriteRule ^oldpage\.cfm$ /newfolder/%1? [L,R=301,NC]
RewriteRule ^newfolder/([\w\s-]+)/?$ newpage.htm?c=$1 [NC,L,QSA]