我一直在尝试创建用户友好的网址,但多条规则似乎存在冲突。
我需要创建它:
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="^([^=&]+)=([^=&]+)$" />
</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="^([^=&]+)=([^=&]+)$" />
</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规则中重定向。
请任何反馈,我检查过很多相同的帖子,但可以找到解决方案
答案 0 :(得分:1)
如果您的查询与您的php文件名相同,例如
river.php?river=abc
和destination.php?destination=abc
然后您可以像这样更改代码:
<action type="Rewrite" url="{R:1}.php?{R:1}={R:2}" />
所以你的文件名应与url中的query_string相同才能工作