Относительные пути, не работающие с перезаписью IIS

#asp.net #subdomain #iis-7.5

#asp.net #поддомен #iis-7.5

Вопрос:

У меня есть сайт, на который когда люди переходят http://subdomain.mysite.com / он переписывается в

http://mysite.com/clientArea/Default.aspx?ID=1234

и затем, когда люди переходят к http://subdomain.mysite.com/AnythingElse.aspx затем он переписывается в http://mysite.com/clientArea/AnythingElse.aspx

Проблема связана с таблицами стилей, по какой-то причине они разрешаются неправильно.

В моем коде я ввел их следующим образом

 <link rel="Stylesheet" href="css/myStyleSheet.css" type="text/css" media="screen" />
  

Но когда я пытаюсь посетить свой веб-сайт на http://subdomain.mysite.com / и посмотрите на источник, они изменились на это

 <link rel="Stylesheet" href="clientArea/css/myStyleSheet.css" type="text/css" media="screen" />
  

Который не работает, потому что он пытается получить ресурс из

http://subdomain.mysite.com/clientArea/css/myStyleSheet.css

откуда он должен пытаться получить ресурсы

http://subdomain.mysite.com/css/myStyleSheet.css

Я перепробовал множество различных исправлений, включая добавление на страницу.RequestUrl с помощью ~ и тому подобное, но все они добавляют клиентскую область впереди. Что не работает, поскольку мы уже находимся в папке ClientArea.

Любая помощь в этом вопросе была бы отличной.

Вот мои правила перезаписи

 <rule name="Remove Subdomain" enabled="true" stopProcessing="true">
                <match url="^$" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^(?!www)subdomain.mysite.com$" />
                </conditions>
                <action type="Rewrite" url="clientArea/?ID=1234" appendQueryString="true" logRewrittenUrl="true" />
            </rule>
            <rule name="Everything Else" enabled="true" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^(?!www)subdomain.mysite.com$" />
                </conditions>
                <action type="Rewrite" url="clientArea/{R:0}" />
            </rule>
  

Ответ №1:

Попробуйте использовать UrlRewriter.dll и примените приведенный ниже код в Global.ascx

 if (Request.Url.AbsoluteUri.EndsWith(".jpg") || Request.Url.AbsoluteUri.EndsWith(".gif") ||
           Request.Url.AbsoluteUri.EndsWith(".png") || Request.Url.AbsoluteUri.EndsWith(".ico") ||
           Request.Url.AbsoluteUri.EndsWith(".js") || Request.Url.AbsoluteUri.EndsWith(".css"))
        { }
        else
        {
            if (!Convert.ToString(arrPath[1]).Equals("admin", StringComparison.CurrentCultureIgnoreCase))
            {
                if (!Convert.ToString(arrPath[1]).Equals("demo.aspx", StringComparison.CurrentCultureIgnoreCase))
                {
                    URLRewriter.Rewriter.Process();
                }
            }
        }
  

И напишите остальную часть правила в web config и попробуйте.