htaccess不能正确地重写参数

时间:2016-09-30 19:24:05

标签: .htaccess

我正在转换包含以下参数的旧网站:

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

,则可以使用此功能

无法弄清楚第一次重写有什么问题?

2 个答案:

答案 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]