使用 web.config 文件隐藏文件扩展名但排除 POST 请求
Hiding file extensions using web.config file but exclude POST requests
所以我试图使用 web.config 文件在我的 url 中隐藏文件扩展名,这是我的代码:
<!-- Remove file extension .asp -->
<rule name="RemoveASP" enabled="true" stopProcessing="true">
<match url="(.*)\.asp" />
<action type="Redirect" url="{R:1}" />
</rule>
<rule name="AddASP" enabled="true">
<match url=".*" negate="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
</conditions>
<action type="Rewrite" url="{R:0}.asp" />
</rule>
</rule>
然而,当我尝试使用 ajax 时,这导致我的联系表单出现问题,它只是失败并且没有提交任何数据:
var url = "tutors.asp?YS="+YS+"&ORG="+ORG+"&BOTH="+BOTH+"&COM="+COM+"&page=International-Contact";
var jqxhr = $.ajax({
url: url,
cache: false,
type: "POST",
data: { fname: fname, lname: lname, role: role, forg: forg, location: location, phone: phone, addinfo: addinfo, email: email }
})
.fail(function(){
error = "Oops! There's been a fatal error and the email hasn't sent! Please refresh the page and try again.";
$('#error').html(error);
return false;
})
.done(function(){
$('#form_container').html("<h3>Thank you!</h3><p>Your email has been sent successfully.</p>");
});
});
ajax 代码提交给 tutors.asp 但规则允许,所以我重定向到没有 asp 扩展名的 url。那么如何排除重定向 POST 请求?
您可以将服务器变量 REQUEST_METHOD
的条件添加到您的重写规则中。这是您的规则,仅限于 GET
个请求:
<rule name="RemoveASP" enabled="true" stopProcessing="true">
<match url="(.*)\.asp" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_METHOD}" pattern="^GET$" />
</conditions>
<action type="Redirect" url="{R:1}" />
</rule>
所以我试图使用 web.config 文件在我的 url 中隐藏文件扩展名,这是我的代码:
<!-- Remove file extension .asp -->
<rule name="RemoveASP" enabled="true" stopProcessing="true">
<match url="(.*)\.asp" />
<action type="Redirect" url="{R:1}" />
</rule>
<rule name="AddASP" enabled="true">
<match url=".*" negate="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
</conditions>
<action type="Rewrite" url="{R:0}.asp" />
</rule>
</rule>
然而,当我尝试使用 ajax 时,这导致我的联系表单出现问题,它只是失败并且没有提交任何数据:
var url = "tutors.asp?YS="+YS+"&ORG="+ORG+"&BOTH="+BOTH+"&COM="+COM+"&page=International-Contact";
var jqxhr = $.ajax({
url: url,
cache: false,
type: "POST",
data: { fname: fname, lname: lname, role: role, forg: forg, location: location, phone: phone, addinfo: addinfo, email: email }
})
.fail(function(){
error = "Oops! There's been a fatal error and the email hasn't sent! Please refresh the page and try again.";
$('#error').html(error);
return false;
})
.done(function(){
$('#form_container').html("<h3>Thank you!</h3><p>Your email has been sent successfully.</p>");
});
});
ajax 代码提交给 tutors.asp 但规则允许,所以我重定向到没有 asp 扩展名的 url。那么如何排除重定向 POST 请求?
您可以将服务器变量 REQUEST_METHOD
的条件添加到您的重写规则中。这是您的规则,仅限于 GET
个请求:
<rule name="RemoveASP" enabled="true" stopProcessing="true">
<match url="(.*)\.asp" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_METHOD}" pattern="^GET$" />
</conditions>
<action type="Redirect" url="{R:1}" />
</rule>