在重写规则中为特定页面追加查询字符串 Web.config
Append Query String for a specific page in Rewrite Rule Web.config
我要添加打开以下页面
http://test.com/Collection.aspx?title=Women
作为
和
http://tests.com/Collection.aspx?title=Women
为
我尝试使用以下重写规则,但这些规则适用于所有页面,我只想针对这个特定部分实施。
<rule name="RedirectUserFriendlsssyURL1" stopProcessing="true">
<match url="^Collection\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^title=([^=&]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
<rule name="RewriteUserFriendlyURL1" 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="Collection.aspx?title={R:1}" />
</rule>
请帮助我如何仅针对这些特定页面执行此操作。实际上,如果我申请所有页面,它会阻止其他一些功能正常工作。
在你的情况下我要做的是只将重定向部分留给 url 重写模块:
<rule name="RedirectUserFriendlsssyURL1" stopProcessing="true">
<match url="^Collection\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^title=([^=&]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
然后通过 global.asax:
中的路由处理其余的
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("CollectionRoute",
"{title}",
"~/Collection.aspx", false,
new RouteValueDictionary(),
//Here you can define the regex pattern to match the title phrases
new RouteValueDictionary {
{ "title", "(women)|(pathann)" }
});
}
当然,如果您仍然希望让 url 重写模块处理所有事情,您可以这样定义规则:
<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
<match url="(women)|(pathann)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Collection.aspx?title={R:1}" />
</rule>
我要添加打开以下页面 http://test.com/Collection.aspx?title=Women
作为
和
http://tests.com/Collection.aspx?title=Women
为
我尝试使用以下重写规则,但这些规则适用于所有页面,我只想针对这个特定部分实施。
<rule name="RedirectUserFriendlsssyURL1" stopProcessing="true">
<match url="^Collection\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^title=([^=&]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
<rule name="RewriteUserFriendlyURL1" 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="Collection.aspx?title={R:1}" />
</rule>
请帮助我如何仅针对这些特定页面执行此操作。实际上,如果我申请所有页面,它会阻止其他一些功能正常工作。
在你的情况下我要做的是只将重定向部分留给 url 重写模块:
<rule name="RedirectUserFriendlsssyURL1" stopProcessing="true">
<match url="^Collection\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^title=([^=&]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
然后通过 global.asax:
中的路由处理其余的void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("CollectionRoute",
"{title}",
"~/Collection.aspx", false,
new RouteValueDictionary(),
//Here you can define the regex pattern to match the title phrases
new RouteValueDictionary {
{ "title", "(women)|(pathann)" }
});
}
当然,如果您仍然希望让 url 重写模块处理所有事情,您可以这样定义规则:
<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
<match url="(women)|(pathann)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Collection.aspx?title={R:1}" />
</rule>