我试图将一个带有多个querystring参数的URL放入文件夹结构URL中,但遇到了一个500内部服务器错误。
我的传入URL看起来像www.fivestarprofessional.com/ag?PY=16&PF=wm&MKT=Delaware
我的目标URL需要写为delaware.fivestarprofessional.com/16/wm/index.html
我创建了3个RewriteCond
语句来捕获参数,并创建了一个RewriteRule来创建输出
RewriteCond %{QUERY_STRING} !^(PY=.*)$ [NC]
RewriteCond %{QUERY_STRING} !^(PF=.*)$ [NC]
RewriteCond %{QUERY_STRING} !^(MKT=.*)$ [NC]
RewriteRule %3.fivestarprofessional.com/%1/%2/index.html
如有任何协助,我们将不胜感激。
您可以使用此规则进行重定向:
RewriteCond %{QUERY_STRING} (?:^|&)PY=([^&]+) [NC]
RewriteCond %1::%{QUERY_STRING} (.*?)::(?:|.*&)PF=([^&]+) [NC]
RewriteCond %1/%2::%{QUERY_STRING} (.*?)::(?:|.*&)MKT=([^&]+)
RewriteRule ^ag/?$ http://%2.fivestarprofessional.com/%1/index.html? [L,NC,NE,R=302]
%
变量仅从使用相同%{QUERY_STRING}
的最新条件中捕获
试试这个:
RewriteCond "%{QUERY_STRING}" "^PY=([^&]+).*&PF=([^&]+).*&MKT=([^&]+)" [NC]
RewriteRule "www.fivestarprofessional.com/ag" "%3.fivestarprofessional.com/%1/%2/index.html"
以下问题已得到纠正:
RewriteRule
采用3个参数而不是2个。RewriteCond
的参数没有用引号括起来。对
RewriteCond
规则的反向引用。。。- 。。。只引用最后匹配的条件(由@anubhava指出,在apachehttpd文档中有文档记录)。因此,这些规则需要整合在一起
- 。。。引用了参数名称加上查询字符串的完整剩余部分
- 。。。由于使用了
^
锚,将与以相应ul参数开头的查询字符串匹配 - 。。。无论如何都会是空的,因为当模式不匹配时激发的规则(使用
!
前缀)
建议阅读apachehttpd文档的正确部分。
目前的解决方案假设。。。
查询字符串以url参数
PY
开头url参数
PY
、PF
、MKT
在查询字符串中出现的顺序是固定的。