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