URL重写使得访问ASP.NET中任何重写的链接后所有链接都具有相同的模式
我正在使用 UrlRewriter
重写 ASP.NET 应用程序中的 URL。一切工作正常,我需要做的工作工作正常。
我想将 ~/product/45/something
重定向到 ~/show_product_details.aspx?current_prod=45
并且工作正常。但问题是,当我请求 ~/product/45/something
时,我从 ~/show_product_details.aspx?current_prod=45
获取页面。之后,当我单击像 ~/home.aspx
这样的链接时,它再次将我重定向到 ~/product/45/home.aspx
。
请建议如何解决这个问题。我正在使用这个规则:
<add name="Gallery1" virtualUrl="^~/product/(.*)/(.*)"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/show_product_details.aspx?current_prod=$1"
ignoreCase="true" />
I am using UrlRewriter
to rewrite my urls in an ASP.NET application. Everything works fine and the work which I need to do is working ok.
I want to redirect ~/product/45/something
to ~/show_product_details.aspx?current_prod=45
and it's working fine. But the problem is when I request ~/product/45/something
, I am getting the page from ~/show_product_details.aspx?current_prod=45
. After that when I click some link like ~/home.aspx
, it again redirects me to ~/product/45/home.aspx
.
Please suggest how to fix this. I am using this rule:
<add name="Gallery1" virtualUrl="^~/product/(.*)/(.*)"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/show_product_details.aspx?current_prod=$1"
ignoreCase="true" />
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
听起来 ASP.NET 应用程序中的 URL 并未解析为应用程序的根目录,而是相对链接,从而导致考虑文件夹结构。
如果您使用 ASP.NET Web 窗体,则需要确保在输出 URL 时调用 ResolveUrl("~/home.aspx"),或者确保超链接为 runat=server,例如:
或者:
另一种方法解决这个问题的方法是在 HTML 中添加一个基本引用,它告诉浏览器页面上的所有链接都必须以指定路径为根:
在
部分中:
根据href='http://www.yourwebsite.com/'/>
It sounds like the URLs in your ASP.NET application are not resolved to the root of the application, but rather are relative links, causing the folder structure to be taken into account.
If you are using ASP.NET Web Forms you need to ensure you either call ResolveUrl("~/home.aspx") when outputting the URL, or ensure that the hyperlink is runat=server, for example:
OR:
Another way you can resolve this is to have a base reference in your HTML, which tells the browser that ALL links on the page must be rooted at the specified path:
In the
<head>
section:<base href='http://www.yourwebsite.com/' />