[英]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_folder
和New_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.