Asp.net 在共享主机上忽略web.config重定向
我有一个网页托管在共享的Microsoft IIS/8.5服务器上。 我在该服务器上没有管理员权限,也没有访问其配置文件的权限,因此我无法真正确保模块或元素已正确安装/设置 我想建立一个从名为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>
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>