1

我正在尝试将一些简单的 .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>

本质上,我为此做了与所有其他(工作)规则相同的事情,但这个不是打球。唯一的区别是这条规则[QSA]在 .htaccess 中有一条指令,我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 查询字符串时,相同的规则会正常运行。

有人可以帮忙吗?

4

1 回答 1

0

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

这并没有产生任何错误,因为我已经预料到变量可能不会由某些服务器提供并退回到另一个服务器的事件 - 但是该代码是在我将系统更改为使用重写的 URL 工作之前编写的导致问题的部分......!

于 2012-07-05T02:01:05.710 回答