使用urlrewriter时图像和样式表出现问题

时间:2008-12-06 20:08:55

标签: asp.net friendly-url url-rewriting

我在这里使用urlrewriter.net作为几个问题的推荐。 我在显示图像和样式表方面遇到了困难。

我阅读了ScottGu的博客(再次按照此处的建议),最后他确实解决了这个问题并声明使用〜/用于服务器控件等。(文章末尾的“正确处理CSS和图像参考”) )。

我尝试了他的解决方案,似乎没有用。

对我来说唯一有用的就是写出完整的路径。出于某种原因,我认为这不是正确的解决方案。这将成为开发和调试的一个严重问题。

有谁知道问题的原因是什么? 我需要在web.config文件中更改一些内容吗?

由于

8 个答案:

答案 0 :(得分:2)

根据我的经验基础标记是解决问题的根源

我强烈建议第一个选项,即在行动之前限制URLrewriter允许生效的内容,即检查.aspx 扩展名。

答案 1 :(得分:2)

您是否尝试使用Page.ResolveUrl?

<link href="<%=Page.ResolveUrl("~/mycss.css")%>" type="text/css" rel="stylesheet" />

答案 2 :(得分:0)

我认为您需要从重写引擎中排除样式表和图像目录。我不熟悉您正在使用的引擎,但是如果您使用的是基于非常宽的规则重写的重写规则,它将错误地指向您的样式表和图像,以及我相信的javascripts。

您还可以尝试使用基本标记。

<base href="http://www.w3schools.com/images/" />

尝试将其放在<head>中,指向您的图片文件夹。

答案 3 :(得分:0)

我第二次使用基础href。虽然当站点从域的根目录运行时(即与视觉工作室服务器相比),你不得不做一点点差异。

<base id="BasePath" runat="Server"/&GT;

然后在后面的主代码中。

protected void SetBaseHref() {
     if(Request.RawUrl!= Request.Url.PathAndQuery)
        {
            string baseUrl =“”;

        if (Request.IsSecureConnection)
            baseUrl += "https://";
        else
            baseUrl += "http://";
        baseUrl += Request.Url.Host;

        if (Request.Url.Port != 80)
            baseUrl += ":" + Request.Url.Port.ToString();

        baseUrl += Request.RawUrl;

        BasePath.Attributes.Add("HREF", baseUrl);
    }

}

答案 4 :(得分:0)

〜/仅适用于具有runat =“server”属性的标签,因为这会告诉asp.net呈现控件。

e.g。

&lt; link href =“〜/ mycss.css”type =“text / css”rel =“stylesheet”/&gt;

不会呈现您的期望,因为asp.net不会呈现控件。相反,你应该使用。

&lt; link runat =“server”href =“〜/ mycss.css”type =“text / css”rel =“stylesheet”/&gt;

另外将css链接放在head标签中,例如

&lt; head runat =“server”&gt;
&lt; link href =“〜/ mycss.css”type =“text / css”rel =“stylesheet”/&gt;
&LT; /头&GT;

答案 5 :(得分:0)

您可以使用:

<a href="<% =GetBaseURL() %>/">Home</a>

public static string GetBaseURL()
{

string url =HttpContext.Current.Request.Url.Scheme + “://” + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath.TrimEnd(’/') + ‘/’;

//EPiServer’s url start with a / so remove the url if (when) it contains one
if(url.EndsWith(”/”))
return url.Remove(url.LastIndexOf(”/”));
else
return url;
}

答案 6 :(得分:0)

URL重写的一个大问题是,当您使用相对路径时,它会使您感到困惑。

例如,如果您的应用程序的根目录中有一个名为page.aspx的文件,该文件用于多级导航的页面。 e.g。

Virtual Path    =>    Physical Path
 /              =>    /page.aspx?id=1
 /food/banana   =>    /page.aspx?id=2

假设你在page.aspx中有一个相对路径,你的css文件位于/css/main.css

<link rel="stylesheet" href="css/main.css"/>

当从/ food / banana的上下文执行page.aspx时,浏览器将尝试查找不存在的/food/css/main.css。

我采用的方式是对图像,CSS,JS进行可重复的URL重写,并且具有到样式表(以及img src和JavaScript)的绝对链接。这样您就可以保证浏览器始终能够找到它。然后从样式表中可以使用背景图像的相对路径。

我发现这种方法最简单,因为您不需要花费数周的时间来反复重写链接。

答案 7 :(得分:0)