Web.Config Url 重写有效但重定向无效
Web.Config Url rewrite works but Redirect not working
我有以下 web.config 我在其中添加了 URL 重写和重定向规则。这是部分工作。
代码:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<caching enabled="false" />
<rewrite>
<rules>
<rule name="Rewrite to pages.asp">
<match url="^pages/([_0-9a-z-]+)" />
<action type="Rewrite" url="pages.asp?p={R:1}" />
</rule>
<rule name="Redirect from pages.asp">
<match url="^pages/([_0-9a-z-]+)" />
<action type="Redirect" url="pages/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
URL结构是这样的:
https://www.example.com/pages.asp?p=my-article
重写应该是这样的(并且有效):
https://www.example.com/pages/my-article/
如果我手动访问此 URL 它可以工作,但重定向部分无法自动工作。此代码有问题。
urlrewrite规则的执行顺序是从上到下,执行完Rewrite规则后,重写的URL与你的重定向规则中的参数不匹配,这就是重定向的原因不起作用。
更详细的错误信息,可以使用失败请求跟踪查看
规则都写错了,通过使用IIS重写规则管理器,我现在有一个工作代码。这可能会对遇到同样问题的其他人有所帮助。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<caching enabled="false" />
<rewrite>
<rules>
<rule name="RedirectPages" stopProcessing="true">
<match url="^pages\.asp$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^p=([^=&]+)$" />
</conditions>
<action type="Redirect" url="pages/{C:1}" appendQueryString="false" />
</rule>
<rule name="RewritePages" stopProcessing="true">
<match url="^pages/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="pages.asp?p={R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="OutboundPages" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^(.*/)pages\.asp\?p=([^=&]+)$" />
<action type="Rewrite" value="{R:1}pages/{R:2}/" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>
我有以下 web.config 我在其中添加了 URL 重写和重定向规则。这是部分工作。
代码:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<caching enabled="false" />
<rewrite>
<rules>
<rule name="Rewrite to pages.asp">
<match url="^pages/([_0-9a-z-]+)" />
<action type="Rewrite" url="pages.asp?p={R:1}" />
</rule>
<rule name="Redirect from pages.asp">
<match url="^pages/([_0-9a-z-]+)" />
<action type="Redirect" url="pages/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
URL结构是这样的:
https://www.example.com/pages.asp?p=my-article
重写应该是这样的(并且有效):
https://www.example.com/pages/my-article/
如果我手动访问此 URL 它可以工作,但重定向部分无法自动工作。此代码有问题。
urlrewrite规则的执行顺序是从上到下,执行完Rewrite规则后,重写的URL与你的重定向规则中的参数不匹配,这就是重定向的原因不起作用。
更详细的错误信息,可以使用失败请求跟踪查看
规则都写错了,通过使用IIS重写规则管理器,我现在有一个工作代码。这可能会对遇到同样问题的其他人有所帮助。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<caching enabled="false" />
<rewrite>
<rules>
<rule name="RedirectPages" stopProcessing="true">
<match url="^pages\.asp$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^p=([^=&]+)$" />
</conditions>
<action type="Redirect" url="pages/{C:1}" appendQueryString="false" />
</rule>
<rule name="RewritePages" stopProcessing="true">
<match url="^pages/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="pages.asp?p={R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="OutboundPages" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^(.*/)pages\.asp\?p=([^=&]+)$" />
<action type="Rewrite" value="{R:1}pages/{R:2}/" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>