Don*_*mas 3 iis-7 url-rewriting
在我的IIS 7配置中,我创建了友好的URL进行转换:
http://mysite/restaurant.aspx?Name=SomeName
Run Code Online (Sandbox Code Playgroud)
至
http://mysite/SomeName
Run Code Online (Sandbox Code Playgroud)
为此,我有以下规则:
<rule name="RedirectUserFriendlyURL1" enabled="true" stopProcessing="true">
<match url="^Restaurant\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
<add input="{QUERY_STRING}" pattern="^Name=([^=&]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
<rule name="RewriteUserFriendlyURL1" enabled="true" stopProcessing="false">
<match url="^([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" pattern=".aspx" negate="true" />
</conditions>
<action type="Rewrite" url="Restaurant.aspx?Name={R:1}" appendQueryString="false" />
</rule>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我得到的每一个回发:
请注意,我已将appendQueryString设置为false.
表单回发操作使用基础URL,而不是原始URL.
一个简单的解决方案(我相信服务器端表单操作属性仅在3.5+中可用):
protected void Page_Load(object sender, EventArgs e)
{
if ( !String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_ORIGINAL_URL"]) )
{
form1.Action = Request.ServerVariables["HTTP_X_ORIGINAL_URL"];
}
}
Run Code Online (Sandbox Code Playgroud)
http://blogs.iis.net/ruslany/archive/2008/10/23/asp-net-postbacks-and-url-rewriting.aspx