在共享主机上忽略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_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>
测试它在我的本地机器上的文件夹,子文件夹与查询字符串的请求。我希望这也适用于共享主机。
谢谢。我同意你的重写规则是正确的,应该做这项工作,但*在这台服务器上*,重定向不起作用。我的问题是“我的规则是否正确?我的主人是否阻止我重新定向?如果是,我该怎么说?”你的规则也是正确的,但这并不能帮助我理解**为什么这些规则不适用。 –
共享主机的名称是什么?这是一个免费账户?共享主机通常意味着相同的服务器,而不是IIS域中的相同文件夹。 – VDWWD
它属于教职员工,我有一个帐户,类型为“http:// sharedhosting.com/myusername /”的子文件夹。 –
@Clément更新你的问题与你如何尝试...其难以阅读的评论 – Webruster
@Clément我提供了2个解决方案,其中一个用'IIS url'重写另一个用'http handlers' – Webruster
对不起但我完全不知道如何使用'httphandlers'。我不熟悉'asp.net',所以我试图测试,但我甚至不能告诉你涉及'httphandlers'的解决方案是否工作。正如我所说的,涉及'web.config'的解决方案不起作用,我非常乐观。非常感谢您的帮助,我很感激。 –