【问题标题】:Query string append when converting .htaccess to web.config将 .htaccess 转换为 web.config 时追加查询字符串
【发布时间】:2012-06-16 13:51:23
【问题描述】:

我正在尝试将一些简单的 .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 查询字符串时,同样的规则可以正常运行。

有人可以帮忙吗?

【问题讨论】:

    标签: apache .htaccess iis web-config


    【解决方案1】:

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

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

    【讨论】:

    • 很高兴你能成功。我尝试使用您的正则表达式,但它仅适用于以 'table/' 开头的文本,因此任何网址都不适用于它。
    • 是的,这是用于不同目的的少数规则之一,在这种特殊情况下 - 它旨在仅适用于某些 URL。我认为正则表达式应该可以工作,因为它可以在 htaccess 中工作,所以一开始并不清楚出了什么问题。表明有时用新鲜的眼光看待事物是要走的路!
    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多