将.htaccess转换为web.config时追加查询字符串

时间:2012-06-13 14:58:31

标签: apache .htaccess iis web-config

我正在尝试将一些简单的.htaccess重写转换为web.config xml;一切都很好,但是我遇到了一个涉及查询字符串的特殊问题。

这是.htaccess规则:

RewriteRule ^table/([a-zA-Z0-9\-_]+)/delete/([^/\.]+)$ table-index.php?mode=delete&type=$1&id=$2 [QSA,L]

以下是我翻译的方式:

<rule name="delete">
  <match url="^table/([a-zA-Z0-9\-_]+)/delete/([^/\.]+)$" ignoreCase="true" />
  <action type="Rewrite" url="table-index.php?mode=delete&amp;type={R:1}&amp;id={R:2}" appendQueryString="true" />
</rule>

基本上,我为此做的与我所有其他(工作)规则相同,但这个规则并不是在打球。唯一的区别是此规则在.htaccess中有[QSA]指令,我将其转换为appendQueryString="true"以获取XML。

规则不会破坏IIS,它也不起作用 - 应该显示为:

http://my.site/admin/table/mailing-list/delete/1?confirm=true

显示为

http://my.site/admin/table-index.php?confirm=true

缺少相当多的重要信息并导致不应发生的事情......当URL中没有?confirm = true查询字符串时,相同的规则正常运行。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我对此有另一种看法并找到了我自己的解决方案。重写规则没有错,相反,我依赖于我的一个链接$ _SERVER ['REDIRECT_URL']中的apache服务器变量,IIS没有提供,相反,$ _SERVER ['REQUEST_URI']为我修复了它

这没有产生任何错误,因为我已经预料到某些服务器可能没有给出该变量的事件,并且又回到另一个服务器 - 但是在我将系统改为工作之前写入了该代码在其中导致问题的部分重写了URL ...!