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

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

问题描述:

我有一个托管在共享Microsoft-IIS/8.5服务器上的网页。 我没有该服务器的管理员权限,而且我也无法访问其配置文件,因此我无法确定URL rewrite模块或HTTP redirect元素是否已正确安装/设置。在共享主机上忽略web.config重定向

我想建立一个从名为old_folder的文件夹到名为new_folder的文件夹(都位于我的根目录,即http://sharedhosting.com/myusername/)。 我放在根目录下面的文件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> 

但所有我能得到的是一个403 - Forbidden: Access is denied.(如果我离开的空old_folder)或404 - File or directory not found.(如果我删除它)。

我尝试使用HTTP Redirect,在old_folder放置Web.config文件,其中包含

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
     <httpRedirect enabled="true" destination="http://sharedhosting.com/myusername/new_folder/" /> 
    </system.webServer> 
</configuration> 

但是这并没有任何工作。

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

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

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

我错过了什么?

最后一次编辑BOUNTY到期之前 为了澄清,我的问题是“如何理解为什么服务器无法正确解释/无视我的指示?”。

We came to the conclusion这可能是我的服务器奇怪的设置,我正在试图“恢复工程”,并检测是什么让服务器忽略重定向/重写规则。

你可以通过使用HttpHandlers来达到同样的效果,所以我假设你可以在浏览器中直接访问Old_folderNew_folder

下面是一个简单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_config添加处理程序如下:

system.web> 
    <httpHandlers> 
    <add verb="*" path="xxx/*.*" type="yourname.Handlers.RedirectHandler"/> 
    </httpHandlers> 
</system.web> 

使用IIS Url_rewriting:

<?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> 
+0

@Clément更新你的问题与你如何尝试...其难以阅读的评论 – Webruster

+0

@Clément我提供了2个解决方案,其中一个用'IIS url'重写另一个用'http handlers' – Webruster

+0

对不起但我完全不知道如何使用'httphandlers'。我不熟悉'asp.net',所以我试图测试,但我甚至不能告诉你涉及'httphandlers'的解决方案是否工作。正如我所说的,涉及'web.config'的解决方案不起作用,我非常乐观。非常感谢您的帮助,我很感激。 –

我认为这可以做无线一个简单的重写规则。

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

上述规则将所有请求发送到新文件夹,但保留旧网址old_folder在其中。如果你想要的网址,以改变它的显示器以它new_folder,使用

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

测试它在我的本地机器上的文件夹,子文件夹与查询字符串的请求。我希望这也适用于共享主机。

+0

谢谢。我同意你的重写规则是正确的,应该做这项工作,但*在这台服务器上*,重定向不起作用。我的问题是“我的规则是否正确?我的主人是否阻止我重新定向?如果是,我该怎么说?”你的规则也是正确的,但这并不能帮助我理解**为什么这些规则不适用。 –

+0

共享主机的名称是什么?这是一个免费账户?共享主机通常意味着相同的服务器,而不是IIS域中的相同文件夹。 – VDWWD

+0

它属于教职员工,我有一个帐户,类型为“http:// sharedhosting.com/myusername /”的子文件夹。 –