我正在从IIS迁移到Apache(在Windows上),并努力适应重写规则(在IIS中使用Helicon ISAPI_Rewrite 3)。
该规则将看起来像目录结构路径的内容映射回一组查询字符串参数。路径中可以有任意数量的参数。
例如
/ basket / param1 / value1 / param2 / value2 / param3 / value3 ...等等...
成为...
/ basket?param1 = value1&param2 = value2&param3 = value3 ...等等...
ISAPI_Rewrite中的规则:
# This rule simply reverts parameters that appear as folders back to standard parameters
# e.g. /search-results/search-value/red/results/10 becomes /search-results?search-value=red&results=10
RewriteRule ^/(.*?)/([^/]*)/([^/]*)(/.+)? /$1$4?$2=$3 [NC,LP,QSA]
我首先发现Apache没有'LP'标志,因此将其替换为N = 10作为循环测试...
RewriteRule ^(.*?)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N=10,QSA]
但是,Apache错误日志显示一遍又一遍地添加相同的参数,直到达到N标志上的循环数为止,以HTTP 500错误结束。
有什么想法我要去哪里吗?!?
答案 0 :(得分:0)
做了大量的工作并吸引了我的Google Foo之后,我在另一个Stack Overflow评论中找到了解决所有问题的方法...
https://stackoverflow.com/a/5520004/14054970
本质上...
显然,重新添加mod_rewrite存在问题 某些情况下的后固定零件 https://issues.apache.org/bugzilla/show_bug.cgi?id=38642
问题:
如果.htaccess文件中的多个RewriteRules匹配,则不需要 PATH_INFO的副本可能会累积在URI的末尾。
如果您使用的是Apache 2.2.12或更高版本,则可以使用DPI标志来 防止这种http://httpd.apache.org/docs/2.2/rewrite/flags.html
我正在使用Apache 2.4,所以我的重写规则现在如下所示(为了安全起见,我将DPI标志添加到所有规则中)...
RewriteRule ^(.*?)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,N=1000,QSA,DPI]