在共享主机

时间:2017-09-11 05:55:15

标签: asp.net redirect iis web-config url-rewrite-module

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

我想建立一个名为old_folder的文件夹到名为new_folder的文件夹的重定向(两者都在我的根目录,即HTTP redirect)。 我在根文件夹中放置了以下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_folderWeb.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重写,例如,如果http://sharedhosting.com/myusername/folder文件夹存在,http://sharedhosting.com/myusername/folder/被重写为folder(即斜杠)。

我的规则是否正确?我的主人是否阻止我重定向?如果是,我该怎么说?

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

我错过了什么?

BOUNTY EXPIRES之前的最后一次编辑 澄清一下,我的问题是&#34;如何理解为什么服务器没有正确解释/忽略我的指示?&#34;。

http://sharedhosting.com/myusername/可能是我的服务器奇怪的设置,我正在努力恢复工程&#34;那并且检测什么使服务器忽略重定向/重写规则。

2 个答案:

答案 0 :(得分:3)

您可以使用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>

答案 1 :(得分:3)

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

<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>

使用QueryString在带有文件夹,子文件夹的本地计算机上测试它。我希望这也适用于共享主机。