我正在尝试创build一个永久(301)将目录中的所有文件redirect到该目录中的单个文件。
例如,如果用户访问site.com/directory/randompage.html,我希望他们被redirect到site.com/directory/index.html。
我已经尝试在目录上redirect,然后重写文件级别上的redirect,但IIS似乎不允许这样做。
有没有办法完成我所追求的? 或者我必须创build文件的基础上redirect?
对于尝试访问不存在的文件,可以在将用户redirect到您希望其访问的文件的URL的目录上放置自定义404错误。
如果该目录中有其他文件,则必须以文件为单位将文件redirect到其上。 不幸的是,事情就是这样。 如果您有很多文件,则可以编写元数据库修改脚本以添加redirect。
编辑:
如果您可以修改所有这些文件上的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设置为目录文件系统中的物理path,使文件成为redirect。 如果你是一个股票IIS 6安装ADSUTIL可能设置正确。 METABASE_PATH需要引用站点标识符编号(示例中的###,从您的站点的IISpipe理控制台获取)和根目录下的path(离开/ ROOT / there – 所需)。 最后,REDIRECT_URL需要是url(可以是绝对的或相对于网站的根目录)。
您应该可以使用URL重写模块来执行此操作。 我知道有2个为IIS6和更早的版本,IIS7有它自己的模块(最后)。
你可以看看Helicon的ISAPI_Rewrite或者Ionics Isapi Rewrite (也可以在IIS7中工作)。 我使用Ionics,因为它是免费的,但Helicon的重写规则我相信直接与mod_rewrite的Apache模块的规则,这是一个总体上的胜利。
两者都有能力提供永久redirect,规则是基于正则expression式的。 我会看看如果我可以把一个规则的语法放在一起,将涵盖你想要做的事情,并很快发布。
另一个select(只是为了在那里),你可以告诉IIS让ASP.Net在该网站中处理.html,然后创build一个具有Application_BeginRequest代码的global.asax文件,检查URL并相应地redirect。
所有元数据库修改 – 你说的数千个文件? 你可以用IIRF中的一个通配符来做到这一点。
RedirectRule ^/directoryToRedirect/(.*)(?<!index\.html)$ /index.html [L]
在英语中,对于目录directoryToRewrite (不是index.html)中的任何URL,都将其redirect到index.html。
无论您拥有多less个文件,无论是添加新文件还是删除文件,这都可以工作。