htaccess重写规则出现内部服务器错误


internal server error with htaccess rewrite rule

我试图将一个带有多个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参数PYPFMKT在查询字符串中出现的顺序是固定的。