使用 URL 重写时不发布表单数据

Form Data Not Posting While Using URL Rewrite

好的。从哪里开始....

我有一个网站。它在使用经典 asp 的 IIS 服务器上 运行。我在那个网站上有表格。

在我决定将一些 url 重写规则添加到我的 web.config 文件以重定向漂亮的 url 之前,表单工作正常。 这样做之后,我网站上的表格没有 post 数据。它会转到正确的地址,但没有任何内容传递到假定进行处理的页面。如果我这样做,在我正在处理的页面上:

For each FieldName in Request.Form
Response.write FieldName & " = " & Request.Form(FieldName) & "<br>" 
Next

我一无所获。没有表单字段名称或值。

我需要在 web.config 文件中添加什么才能使数据 post?而且...更重要的是...我需要在 web.config 文件中的什么地方添加它?

这是我的 web.config 文件的文本副本 http://elvis-is-alive.com/webconfig.txt

您的 web.config 包含 action=redirect

重定向总是导致重定向 header 被发送到浏览器。这会更改浏览器地址栏中的 URL,然后浏览器会为新地址发出 HTTP GET。使用 HTTP GET,不会发送 form/post 数据;假定所有参数都在 URL 查询字符串中。

如果您想避免重定向并使用真正的重写,请将您的 web.config 更改为使用 action=rewrite。使用这种方法,没有重定向 header 被发送回浏览器,浏览器地址栏永远不会改变,IIS 只是将当前请求流重定向到不同的位置。

有些事情告诉我这不是您想要的 -- 您希望浏览器中的地址栏发生变化,并且希望保留 form/post 数据。这是不可能的,除非你做了一些非常不寻常的事情,例如呈现一个包含原始 form/post 请求的临时插页,其中包含指向新 URL 的操作。我不建议这样做。

为什么不直接更改原始页面 HTML 中的表单操作?