在 IIS 6 中向大量文件添加“301 重定向”

在 IIS 6 中向大量文件添加“301 重定向”

我正在尝试创建一个永久的(301)重定向,将目录中的所有文件重定向到该目录内的单个文件。

例如,如果用户访问 site.com/directory/randompage.html,我希望他们被重定向到 site.com/directory/index.html。

我尝试在目录中放置重定向,然后在文件级别覆盖重定向,但 IIS 似乎不允许这样做。

有什么办法可以实现我想要的目标吗?还是我必须逐个文件地创建重定向?

答案1

对于尝试访问不存在的文件,您可以在目录中放置自定义 404 错误,将用户重定向到您希望他们访问的文件的 URL。

如果有您必须逐个文件地对该目录中的其他文件进行重定向。不幸的是,情况就是这样。如果您有很多文件,您可以编写元数据库修改脚本来添加重定向。

编辑:

如果您可以修改所有这些文件的 NTFS ACL 以禁止用户读取它们,那么您也可以在目录中删除自定义的 401.3 错误页面。

如果没有的话,请尝试以下操作:

@echo off
SET SOURCE_DIR=C:\path-to-directory-in-filesystem
SET ADSUTIL=cscript C:\inetpub\adminscripts\adsutil.vbs
SET METABASE_PATH=W3SVC/####/ROOT/path/to/site/directory
SET REDIRECT_URL=/foo/foo.txt

for /f "usebackq delims=" %%i in (`dir /b %SOURCE_DIR%`) do (
 %ADSUTIL% CREATE %METABASE_PATH%/%%i
 %ADSUTIL% SET %METABASE_PATH%/%%i/KeyType "IIsWebFile"
 %ADSUTIL% SET %METABASE_PATH%/%%i/HttpRedirect "%REDIRECT_URL%, PERMANENT"
)

将 SOURCE_DIR 设置为文件系统中要进行重定向的文件所在目录的物理路径。如果您使用的是 IIS 6 原版安装,则 ADSUTIL 可能设置正确。METABASE_PATH 需要引用站点标识符编号(示例中的 ###,从您站点的 IIS 管理控制台获取)和根目录下的路径(将 /ROOT/ 保留在那里 - 这是必需的)。最后,REDIRECT_URL 需要是 URL(可以是绝对 URL,也可以是相对于站点根目录的 URL)。

答案2

您应该能够使用 URL 重写模块来执行此操作。据我所知,IIS6 及更早版本有 2 个 URL 重写模块,IIS7 有自己的模块(最后)。

你可以看看 Helicon 的ISAPI_重写或者Ionics Isapi 重写(也适用于 IIS7)。我使用 Ionics,因为它是免费的,但我认为 Helicon 的重写规则直接与 mod_rewrite Apache 模块的规则对应,这总体上对它来说是一大优势。

两者都能够提供永久重定向,并且规则基于正则表达式。我会看看我是否可以整理出一条规则的语法,该规则涵盖了您想要执行的操作,然后很快发布它。

答案3

另一个选项(只是将它放在那里)是,您可以告诉 IIS 让 ASP.Net 处理该站点中的 .html,然后创建一个 global.asax 文件,其中包含检查 URL 并相应地重定向的 Application_BeginRequest 代码。

答案4

您说的所有这些元数据库修改——数千个文件?您可以使用一个通配符规则来执行此操作免疫学与免疫学研究所

RedirectRule ^/directoryToRedirect/(.*)(?<!index\.html)$  /index.html  [L]

英文中,它表示对于目录中的任何 URL目录要重写,这不是 index.html,请将其重定向到 index.html 。

无论您有多少个文件,无论您添加新文件、删除文件还是其他什么,这都可以起作用。

相关内容