【问题标题】:IIS URL rewrite issue with web.configweb.config 的 IIS URL 重写问题
【发布时间】:2016-11-03 15:09:48
【问题描述】:

我使用 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]

【问题讨论】:

    标签: regex mod-rewrite iis url-rewriting


    【解决方案1】:

    您需要使用&amp;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>
    

    注意。您可能会发现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>
    

    【讨论】:

    • 您是否修复了 url="..." 中的两个 & 符号?其中有两个。您是否针对更改的文件尝试了在线 XML 验证工具?它会指出错误的确切位置。
    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 2017-02-15
    • 2011-05-23
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2019-10-26
    相关资源
    最近更新 更多