【问题标题】:How to route ALL requests for domain to a sub folder asp.net如何将域的所有请求路由到子文件夹 asp.net
【发布时间】:2013-06-09 02:34:56
【问题描述】:

我已经看到了很多解决方案,但似乎没有一个有效....

我有一个域

producerpte.co.uk

但是我在子文件夹中设置了一个单独的应用程序,因此要查看该应用程序的根目录,您必须转到...

producerpte.co.uk/producerpte

但是我希望它让用户看不到 url 的“site1”部分。

当我在 Web.Server 配置中使用 url 重写或在代码中使用 Context.RewritePath 时(在根目录上设置的应用程序中)它只是将用户重定向到 url(其中包含 site1)我不想要用户知道他们要去一个子文件夹。

我是不是设置错了?

我实际上正在使用 Winhost。我尝试的所有示例都不会在不重定向 url 的情况下更改调用结果:-(

winhost 告诉我应该使用代码/配置来完成。老实说,我更愿意用代码来做......

更新:我尝试了 Max 的答案,我做到了......

 <rules>
    <rule name="Redirect if producerpte" stopProcessing="true">
        <match url="^ producerpte/(.*)$" />
        <action type="Redirect" url="{R:1}" />
    </rule>
    <rule name="Rewrite to sub folder">
        <match url="^.*$" />
        <action type="Rewrite" url="producerpte/{R:0}" />
    </rule>
  </rules>

但运气不好 :-( 而且浏览器中的网址仍然会发生变化....

【问题讨论】:

  • winhost 是否运行 IIS 7 或更高版本?他们是否安装了 IIS 重写模块?
  • IIS 8 但他们说我需要用代码来做!

标签: asp.net asp.net-mvc-4


【解决方案1】:

如果 WinHost 确实启用了 IIS 重写模块,请编辑您的 web.config 文件并尝试此规则:

<rewrite>
<rules>
    <rule name="Redirect if site1" stopProcessing="true">
        <match url="^site1/(.*)$" />
        <action type="Redirect" url="{R:1}" />
    </rule>
    <rule name="Rewrite to sub folder">
        <match url="^.*$" />
        <action type="Rewrite" url="site1/{R:0}" />
    </rule>
</rules>
</rewrite>

--- 更新 ---

好吧,我测试了这个 IIS 配置:

我在 root 网站上添加了规则。
IIS 创建了一个web.config 文件:

这是 web.config 文件的内容:

<configuration>
    <system.webServer>
        <rewrite>
             <rules>
                <rule name="Redirect if producerpte" stopProcessing="true">
                    <match url="^producerpte/(.*)$" />
                    <action type="Redirect" url="{R:1}" />
                </rule>
                <rule name="Rewrite to sub folder">
                    <match url="^.*$" />
                    <action type="Rewrite" url="producerpte/{R:0}" />
                </rule>
              </rules>
        </rewrite>
    </system.webServer>
</configuration>
  • http://localhost:8066/ 显示C:\inetpub\wwwroot\producerpte\producerpte 的内容而不改变浏览器中的 URL

  • http://localhost:8066/producerpte/显示C:\inetpub\wwwroot\producerpte\producerpte的内容,但浏览器中的URL改为http://localhost:8066/

确保您在 root 站点(而不是子应用程序)上创建了规则,我注意到您的配置中有一个前导空格:&lt;match url="^ producerpte/(.*)$" /&gt;^ 和@987654334 之间@。

【讨论】:

  • 嗨,Max,实际上完整的根目录是... producerpte.co.uk/producerpte/ - 这是开箱即用的,但是当我放置配置时... 我得到一个 404,它试图去 producerpte/producerpte(网址也在改变 - 我真的不想要这个 :-()
  • 好吧,我玩了一会儿,它只是重定向,但我希望它返回内容但不更改 url,这甚至可能吗?
  • 嗨 Max,是的,这基本上是正确的答案,所以我已经标记了。但是,现在我正在努力解决如何处理多个文件夹,你能相信它不能相信这有多难……我试图修改你的第二条规则来获取域名 producerpte.co.uk,这样我才能做到我女朋友的网站也有类似的 samyoga ......不要以为你知道吗?对不起,如果不是谢谢你,你已经得到了足够的帮助……但我已经尝试了好几天了!谢谢皮特
猜你喜欢
  • 2015-06-19
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 2017-07-16
  • 1970-01-01
  • 2016-11-28
  • 2010-11-02
相关资源
最近更新 更多