2012-06-13 27 views
1

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

这里是的.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"

规则不破IIS,它只是不工作,要么 - 应该怎样为显示:

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

被显示为

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

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

任何人都可以协助吗?

回答

0

我又看了一遍,发现了我自己的解决方案。重写规则并没有什么错,相反,我依靠的是IIS没有提供的$ _SERVER ['REDIRECT_URL']链接中的一个apache服务器变量,而是$ _SERVER ['REQUEST_URI']为我修复了它。

这不会产生任何错误,因为我已经预料到某些服务器可能不会提供该变量,并且会退回到另一个服务器上 - 但是在更改我的系统以使其工作之前写入了该代码在其中引起问题的部分使用重写的URL ...!

+0

很高兴你的工作。我尝试使用您的正则表达式,但它只适用于以'table /'开头的文本,所以任何网址都无法使用它。 – TWickz

+1

是的,这是针对不同目的的一些规则之一,在这种特殊情况下 - 它只是用于某些URLS。我认为正则表达式应该工作,因为它在htaccess中起作用,所以起初不清楚哪里出了问题。去证明,有时用新鲜的眼睛看东西是一种方式! – Codecraft