我使用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]
答案 0 :(得分:0)
您需要使用&
转义属性值中的&符号:
<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>
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&catId={R:1}&" appendQueryString="true" />
</rule>