Adicionando “301 Redirect” a um grande número de arquivos no IIS 6

1

Estou tentando criar um redirecionamento permanente (301) de todos os arquivos em um diretório para um único arquivo dentro desse diretório.

Por exemplo, se um usuário visitar site.com/directory/randompage.html, eu quero que ele seja redirecionado para site.com/directory/index.html.

Eu tentei colocar um redirecionamento no diretório e, em seguida, substituir o redirecionamento no nível do arquivo, mas o IIS não parece permitir isso.

Existe uma maneira de realizar o que eu estou procurando? ou eu tenho que criar um redirecionamento em um arquivo por arquivo?

    
por Cody 24.07.2009 / 18:13

4 respostas

2

Para tentar acessar arquivos que não existem, você pode colocar um erro 404 personalizado no diretório que redireciona o usuário para o URL do arquivo que deseja que eles acessem.

Se houver outros arquivos nesse diretório, você terá que colocar redirecionamentos sobre eles em uma base arquivo-por-arquivo. É assim que é, infelizmente. Se você tiver muitos arquivos, você pode fazer o script da modificação da metabase para adicionar o redirecionamento.

Editar:

Se você puder modificar as ACLs do NTFS em todos esses arquivos para impedir que o usuário as leia, também poderá descartar uma página de erro 401.3 personalizada no diretório.

Se não, tente isto:

@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"
)

Defina o SOURCE_DIR para o caminho físico no sistema de arquivos do diretório com os arquivos para serem redirecionados. O ADSUTIL provavelmente está definido corretamente se você for uma instalação padrão do IIS 6. METABASE_PATH precisa se referir ao número do identificador do site (### no exemplo, obtê-lo no console de gerenciamento do IIS do seu site) e ao caminho sob a raiz (deixar / ROOT / there-- que é necessário). Finalmente, REDIRECT_URL precisa ser o URL (pode ser absoluto ou relativo à raiz do site).

    
por 24.07.2009 / 18:38
0

Você deve ser capaz de empregar um módulo de reescrita de URL para fazer isso. Existem 2 que eu conheço para o IIS6 e versões anteriores, o IIS7 tem seu próprio módulo (finalmente).

Você pode conferir ISAPI_Rewrite ou Ionics Isapi Rewrite (também funciona com o IIS7). Eu uso o Ionics 'porque é grátis, mas as regras de reescrita do Helicon que eu acredito mapeiam diretamente com as regras do módulo mod_rewrite do Apache, o que é uma grande vitória para ele em geral.

Ambos têm a capacidade de fornecer redirecionamentos permanentes e as regras são baseadas em expressões regulares. Vou ver se posso montar a sintaxe de uma regra que cubra o que você quer fazer e publique em breve.

    
por 24.07.2009 / 23:03
0

Outra opção (apenas para mostrá-lo) é que você pode informar ao IIS para permitir que o ASP.Net manipule o arquivo .html nesse site e crie um arquivo global.asax com o código Application_BeginRequest que verifica o URL e redireciona de acordo. / p>     

por 24.07.2009 / 23:05
0

Toda essa modificação da metabase - milhares de arquivos que você diz? Você poderia fazer isso com uma regra curinga no IIRF .

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

Em inglês, diz, para qualquer URL no diretório directoryToRewrite , que NÃO seja index.html, redirecione-o para index.html.

Isso funciona independentemente de quantos arquivos você tem, se você adicionar novos arquivos, remover arquivos, o que for.

    
por 29.07.2009 / 09:39