繁体   English   中英

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

[英]web.config redirection ignored on a shared hosting

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

我想建立一个从名为old_folder的文件夹到名为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重写,因为,例如, http://sharedhosting.com/myusername/folder改写为http://sharedhosting.com/myusername/folder/如果(即,以斜杠) folder文件夹存在。

我的规则正确吗? 我的房东会阻止我重定向吗? 如果可以,我该如何判断?

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

我想念什么?

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

我们得出的结论是,可能是我的服务器设置异常,我正试图对它进行“还原工程”,并检测导致服务器忽略重定向/重写规则的原因。

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

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

<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将请求子文件夹。 我希望这也适用于共享主机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM