IIS URL重写web.config的问题

时间:2016-07-01 09:09:44

标签: regex mod-rewrite iis url-rewriting

我使用mod_rewrite进行了.htaccess重写,并使用在线转换器将其转换为IIS的web.config。

这是我的web.config中的一行:

 <rule name="rule 1G">
    <match url="cat_([0-9]+)(\.[a-z]{3,4})?(.*)$ index.php?_a=viewCat&catId=$1&%1"  ignoreCase="true" />
    <action type="Rewrite" url="/"  />
 </rule>

我得到错误:

Configuration file is not well-formed XML

在上面的第二行中触发了该错误。

任何人都知道我做错了什么?

以下是原始htaccess文件的一部分:

AddType x-mapp-php5 .php

## Activate the mod_rewrite Engine

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} (.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule cat_([0-9]+)(\.[a-z]{3,4})?(.*)$    index.php?_a=viewCat&catId=$1&%1 [NC]

1 个答案:

答案 0 :(得分:0)

您需要使用&amp;转义属性值中的&符号:

<rule name="rule 1G">
  <match url="cat_([0-9]+)(\.[a-z]{3,4})?(.*)$ index.php?_a=viewCat&amp;catId=$1&amp;%1"  ignoreCase="true" />
  <action type="Rewrite" url="/"  />
</rule>

NB。您可能会发现http://xmlvalidation.com/对调试XML文件很有帮助。

<强>更新

上述更改仅会修复XML有效性错误,但不会修复重写规则本身。 match元素应仅描述匹配条件(即Apache RewriteRule的第一部分),而目标URL应在action元素中描述。

反向引用也有不同的语法。

我建议尝试以下规则定义(遗憾的是我无法检查自己是否缺少IIS):

<rule name="rule 1G">
  <match url="cat_([0-9]+)(\.[a-z]{3,4})?(.*)$" ignoreCase="true" />
  <action type="Rewrite" url="index.php?_a=viewCat&amp;catId={R:1}&amp;" appendQueryString="true" />
</rule>