Asp.net 在共享主机上忽略web.config重定向

Asp.net 在共享主机上忽略web.config重定向,asp.net,redirect,iis,web-config,url-rewrite-module,Asp.net,Redirect,Iis,Web Config,Url Rewrite Module,我有一个网页托管在共享的Microsoft IIS/8.5服务器上。 我在该服务器上没有管理员权限,也没有访问其配置文件的权限,因此我无法真正确保模块或元素已正确安装/设置 我想建立一个从名为old\u folder的文件夹到名为new\u folder的文件夹的重定向(这两个文件夹都位于我的根目录,即位于)。 我在根文件夹中放置了以下web.config文件: <?xml version="1.0" encoding="UTF-8"?> <configuration>

我有一个网页托管在共享的Microsoft IIS/8.5服务器上。 我在该服务器上没有管理员权限,也没有访问其配置文件的权限,因此我无法真正确保模块或元素已正确安装/设置

我想建立一个从名为
old\u folder
的文件夹到名为
new\u folder
的文件夹的重定向(这两个文件夹都位于我的根目录,即位于)。 我在根文件夹中放置了以下
web.config
文件:

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <configSections>
        <sectionGroup name="system.webServer">
            <sectionGroup name="rewrite">
                <section name="rules" overrideModeDefault="Allow" />
            </sectionGroup>
        </sectionGroup>
    </configSections>

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="attempt" stopProcessing="true" enabled="true">
                <match url="^old_folder/$" />
                <action type="Redirect" url="new_folder/" redirectType="Permanent"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
但这也不起作用

我知道我的
Web.config
文件被读取(如果其中有错误,我可以得到500个错误)。我怀疑安装了URL重写,因为,例如,
http://sharedhosting.com/myusername/folder
被重写为
http://sharedhosting.com/myusername/folder/
(即带斜杠)如果
文件夹存在

我的规则正确吗?我的主机是否阻止我重定向?如果是,我怎么知道

我在
标记后添加了一个
,以放弃所有其他重写规则,但它仍然没有重定向任何内容

我错过了什么

赏金到期前的最后一次编辑 为了澄清,我的问题是“如何理解服务器为什么没有正确解释/忽略我的指令?”


很可能是我的服务器进行了奇怪的设置,我正试图“还原工程师”,并检测是什么导致服务器忽略重定向/重写规则。

使用
HttpHandlers
<,因此,我假设您可以直接在浏览器中访问
旧文件夹
新文件夹

下面是一个示例
httphandlers
,您可以通过以下方式执行:

youname.Handlers
{
   public class RedirectHandler : IHttpHandler
  {
      public void ProcessRequest(HttpContext context)
     {
        context.Response.Status = "301 Moved Permanently";
        string url = context.Request.Url.ToString().Replace("old_folder", "new_folder");
        context.Response.AddHeader("Location", url);
      }
      public bool IsReusable
     {
        get { return false; }
     } 
   }
}
web\u config
中添加处理程序,如下所示:

system.web>
   <httpHandlers>
     <add verb="*" path="xxx/*.*" type="yourname.Handlers.RedirectHandler"/>
   </httpHandlers>
</system.web>
system.web>
使用IIS Url\u重写:

   <?xml version="1.0"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rewriteMaps>
                <rewriteMap name="yourRedirects">
                    <add key="/yourroot/old_folder/" value="/otherdir/new_folder" />
                </rewriteMap>
            </rewriteMaps>
            <rules>
                <rule name="RedirectRule" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{yourRedirects:{REQUEST_URI}}" pattern="(.+)" />
                    </conditions>
                    <action type="Redirect" url="http://www.yourdomain.com{C:1}" appendQueryString="False" redirectType="Permanent" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

我认为这可以通过一个简单的重写规则来完成

<rule name="ToNewFolder" stopProcessing="true">
   <match url="^old_folder/(.*)" ignoreCase="true" />
   <action type="Rewrite" url="new_folder/{R:1}" />
</rule>

在我的本地计算机上使用文件夹、子文件夹和带有查询字符串的请求对其进行了测试。我希望这也适用于共享主机。

@Clément更新您的问题,了解您是如何尝试的。。。很难读懂comments@Cl我已经提供了两个解决方案,一个是使用
iisurl
重写另一个是使用
http处理程序
很抱歉,但我完全不知道如何使用
httphandlers
。我不熟悉
asp.net
,所以我正在尝试测试,但我甚至无法判断您涉及
httphandlers
的解决方案是否有效。正如我所说,涉及
web.config
的解决方案不起作用,我非常肯定。非常感谢您的帮助,我非常感激。@Clément,啊,np,将尽力帮助您。。首先,请告诉我您的asp.net框架是在
4.6
还是
4.5
中,您将在网络配置手册中了解此版本号。再说一次,我不是根,所以我能做的就是试试看。我创建了一个
.aspx
文件,其中包含
,并将其上载(我知道该文件已正确上载),但当我尝试从浏览器访问它时,我收到一个
404.0
错误。是否存在限制访问
.aspx
文件的筛选器或模块?谢谢。我同意您的重写规则是正确的,应该可以完成这项工作,但是在这个服务器上,重定向不起作用。我的问题是“我的规则正确吗?我的主机是否阻止我重定向?如果是,我如何判断?”您的规则也是正确的,但这无助于我理解为什么不应用这些规则。共享主机的名称是什么?这是一个免费帐户吗?共享主机通常指的是同一台服务器,而不是IIS域中的同一文件夹。它属于一个教员,我有一个帐户,类型为
http://sharedhosting.com/myusername/
.Ah,没有办法测试我自己:(但是如果你尝试
^username/old\u folder/
username/new\u folder/{R:1},会怎么样
?也许那会有用…很好的尝试,但是没有
;-)
<rule name="ToNewFolder" stopProcessing="true">
   <match url="^old_folder/(.*)" ignoreCase="true" />
   <action type="Rewrite" url="new_folder/{R:1}" />
</rule>
<rule name="ToNewFolder" stopProcessing="true">
   <match url="^old_folder/(.*)" ignoreCase="true" />
   <action type="Redirect" url="new_folder/{R:1}" />
</rule>