iis url重写用户友好的URL多​​个规则冲突而不是wokrs

时间:2017-10-03 08:54:02

标签: mod-rewrite iis

我一直在尝试创建用户友好的网址,但多条规则似乎存在冲突。

我需要创建它:

www.example.com/destination/abc

www.example.com/river/cde

使用此代码:

<rules>
  <rule name="RedirectUserFriendlyURL3" stopProcessing="true">
   <match url="^destination\.php$" />
    <conditions>
      <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
      <add input="{QUERY_STRING}" pattern="^([^=&amp;]+)=([^=&amp;]+)$" />
    </conditions>
    <action type="Redirect" url="{C:1}/{C:2}" appendQueryString="false" />
  </rule>
  <rule name="RewriteUserFriendlyURL3" stopProcessing="true">
    <match url="^([^/]+)/([^/]+)/?$" />
      <conditions>
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="destination.php?{R:1}={R:2}" />
  </rule>
  <rule name="RedirectUserFriendlyURL4" stopProcessing="true">
     <match url="^river\.php$" />
        <conditions>
          <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
          <add input="{QUERY_STRING}" pattern="^([^=&amp;]+)=([^=&amp;]+)$" />
   </conditions>
   <action type="Redirect" url="{C:1}/{C:2}" appendQueryString="false" />
 </rule>
 <rule name="RewriteUserFriendlyURL4" stopProcessing="true">
    <match url="^([^/]+)/([^/]+)/?$" />
       <conditions>
         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
       </conditions>
     <action type="Rewrite" url="river.php?{R:1}={R:2}" />
    </rule>
</rules>

上述规则不能合作,两个页面都会重定向到第一个规则中设置的规则。所以我得到$var is undefined的错误并且页面上没有结果,但是网址不同。

我得到了我需要的结果

www.example.com/destination/abc

www.example.com/river/cde

但不知何故,它似​​乎只是在1规则中重定向。

请任何反馈,我检查过很多相同的帖子,但可以找到解决方案

1 个答案:

答案 0 :(得分:1)

如果您的查询与您的php文件名相同,例如

river.php?river=abcdestination.php?destination=abc

然后您可以像这样更改代码:

<action type="Rewrite" url="{R:1}.php?{R:1}={R:2}" />

所以你的文件名应与url中的query_string相同才能工作