Uso di provider di riscrittura personalizzati con modulo di riscrittura URL
Questa procedura dettagliata illustra come usare provider di riscrittura personalizzati con URL Rewrite Module 2.0. La procedura dettagliata usa gli esempi di estendibilità di riscrittura URL 2.0, che possono essere scaricati da URL Rewrite Extensibility Samples (Esempi di estendibilità di riscrittura URL) in MSDN Code Gallery.
Esempi di estendibilità di riscrittura URL di installazione
Per completare questa procedura dettagliata, scaricare e installare gli esempi di estendibilità di riscrittura URL (https://www.microsoft.com/download/details.aspx?id=43353
). Il pacchetto di installazione Extensibility Samples include assembly .NET e il codice sorgente con implementazione completa dei provider di riscrittura per i tre casi d'uso più comuni:
- Archiviazione dei mapping di riscrittura o reindirizzamento in un database SQL;
- Archiviazione dei mapping di riscrittura o reindirizzamento in un file di testo;
- Archiviazione delle sottostringhe di ricerca in un file di testo.
Durante l'installazione assicurarsi di selezionare l'opzione "Runtime" nell'installazione personalizzata. Verranno registrati i provider di esempio in .NET Global Assembly Cache in modo che possano essere usati dal modulo di riscrittura URL.
Registrazione dei provider
Nel pacchetto di installazione sono inclusi 3 provider di riscrittura:
- DbProvider: questo provider può essere usato per recuperare i mapping di riscrittura da una tabella di database di SQL Server eseguendo una stored procedure
- FileMapProvider: questo provider può essere usato per recuperare i mapping di riscrittura archiviati in un file di testo
- FileContainsProvider: questo provider può essere usato per verificare se una stringa in un file di testo è una sottostringa della stringa di input del provider.
Per usare i provider di esempio nelle regole di riscrittura, i provider devono essere registrati con IIS. Per registrare un provider, è possibile usare l'interfaccia utente di Gestione IIS:
- Aprire la funzionalità Di riscrittura URL in Gestione IIS;
- Selezionare "Visualizza provider..." azione nel riquadro "Azioni" sul lato destro;
- Selezionare "Aggiungi provider..." azione nel riquadro "Azioni" ;
- Nella finestra di dialogo "Aggiungi provider" immettere il nome che si vuole usare per questo provider quando si fa riferimento a esso da una regola di riscrittura.
- Dopo aver scelto il tipo .NET corrispondente per il provider nell'elenco a discesa "Tipo gestito". Si noti che la visualizzazione dei tipi di provider potrebbe richiedere del tempo.
- Ripetere i passaggi precedenti per registrare tutti e tre i provider.
Uso di DbProvider
Per usare DbProvider è necessario accedere a Microsoft SQL Server. Il provider si connette a un database di SQL Server ed esegue una stored procedure che accetta un parametro di input NVARCHAR contenente la stringa dell'URL di input e restituisce una riga, un set di risultati di colonna contenente la stringa dell'URL di output di tipo NVARCHAR.
Creazione di un database di esempio
Aprire un'istanza di SQL Server Management Studio, aprire una nuova finestra di query ed eseguire lo script SQL seguente:
USE [master]
CREATE LOGIN [IIS APPPOOL\DefaultAppPool] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
CREATE DATABASE [RewriteDB]
GO
USE [RewriteDB]
GO
CREATE TABLE [dbo].[RewriteTable](
[OriginalUrl] [nvarchar](256) NOT NULL,
[NewUrl] [nvarchar](256) NOT NULL
) ON [PRIMARY]
GO
CREATE PROCEDURE [dbo].[GetRewrittenUrl]
@input nvarchar(256)
AS
SELECT rt.NewUrl
FROM dbo.RewriteTable rt
WHERE rt.OriginalUrl = @input
GO
CREATE USER [IIS APPPOOL\DefaultAppPool] FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GRANT EXECUTE ON dbo.GetRewrittenUrl TO [IIS APPPOOL\DefaultAppPool];
GO
INSERT INTO dbo.RewriteTable VALUES ('old/catalog/product.html', 'new/category/product.html');
INSERT INTO dbo.RewriteTable VALUES ('old/contactus/index.html', 'new/contactus.html');
GO
Lo script precedente crea un nuovo database denominato RewriteDB, con una tabella RewriteTable e una stored procedure GetRewrittenURL. Concede inoltre le autorizzazioni all'account IIS APPPOOL\DefaultAppPool per eseguire tale stored procedure. Riempie anche la tabella di database con due mapping URL.
Configurazione delle impostazioni di DbProvider
Configurare l'istanza di DbProvider per chiamare la stored procedure:
- In Gestione IIS nella visualizzazione delle funzionalità di riscrittura URL selezionare "Visualizza provider..." int il riquadro azioni.
- Selezionare "Aggiungi provider" e scegliere DbProvider. Denominarlo DB; che sarà il nome in base al quale si farà riferimento al provider da una regola di riscrittura
- Selezionare l'istanza dbProvider denominata DB e fare clic su "Aggiungi impostazione provider..." azione.
- Usare la finestra di dialogo "Modifica impostazione provider" per configurare il provider:
Usare i valori seguenti per le impostazioni del provider:
- SQL Server stringa di connessione: specificare un stringa di connessione di SQL Server, ad esempio:
"Data Source=servername\sqlexpress; Initial Catalog=RewriteDB; Integrated Security=True" - Nome stored procedure: GetRewrittenUrl
- Intervallo minuti cache: impostato su 0 se i valori nella tabella SQL non vengono modificati o impostati su un numero intero positivo in modo che il provider aggiorni periodicamente la cache di riscrittura interna del modulo. Se non viene specificato il valore 0, si presuppone.
Chiamata di DbProvider da una regola di riscrittura
Nella directory radice di un sito Web aprire il file web.config . Se si usa il sito Web predefinito iis, il file deve trovarsi nella C:\inetpub\wwwroot\
cartella .
Incollare la regola di reindirizzamento seguente nel file web.config all'interno dell'elemento /<configuration>/<system.webServer>/<rewrite>/<rules>
:
<rule name="DbProviderTest" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{DB:{R:1}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" />
</rule>
Il contenuto completo del file web.config dovrebbe essere simile al seguente:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<providers>
<provider name="DB" type="DbProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<settings>
<add key="ConnectionString" value="Data Source=ruslany-server\sqlexpress;Initial Catalog=RewriteDB;Integrated Security=True" />
<add key="StoredProcedure" value="GetRewrittenUrl" />
<add key="CacheMinutesInterval" value="0" />
</settings>
</provider>
</providers>
<rules>
<rule name="DbProviderTest" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{DB:{R:1}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" />
</rule>
</rules>
</rewrite>
Questa regola esegue il reindirizzamento HTTP a un URL ottenuto da un database di SQL Server tramite DbProvider. L'istanza dbProvider denominata "DB" viene richiamata dalla condizione della regola e se il risultato restituito dal provider non è vuoto, viene eseguito il reindirizzamento HTTP.
Per testare la regola, aprire un Web browser e effettuare una richiesta a http://localhost/old/catalog/product.html
o http://localhost/old/contactus/index.html
. Si noti che il browser viene reindirizzato a un nuovo URL in base ai mapping di reindirizzamento definiti nella tabella di database RewriteDB. Il server Web restituirà l'errore HTTP 404 per l'URL reindirizzato perché non esiste un file o una directory di questo tipo nel server, ma ciò non è rilevante ai fini di questa procedura dettagliata. La parte importante è che il server Web ha emesso una risposta di reindirizzamento in base alla regola che ha usato DbProvider.
Uso di FileMapProvider
FileMapProvider legge i mapping degli URL da un file di testo. Può essere usato invece della funzionalità di riscrittura delle mappe predefinite quando la quantità di voci della mappa di riscrittura è molto grande e non è pratico mantenerle in un file web.config.
Creazione di un file di mapping di esempio
Creare una nuova directory denominata App_Data nella directory radice del sito Web. In tale directory creare un file di testo denominato redirectmappings.txt. Aggiungere le righe seguenti al file :
old/catalog/product.html, new/category/product.html
old/contactus/index.html, new/contactus.html
AVVERTIMENTO: Assicurarsi sempre che il file di testo non sia direttamente accessibile dal Web. Usare il modulo di filtro richieste IIS o posizionare il file all'interno di App_Data cartella per impedire ai client HTTP di accedere direttamente al contenuto di questo file.
Configurazione di FileMapProvider
Configurare FileMapProvider seguendo la stessa procedura descritta in Configurazione di DbProvider. Usare questi valori per le impostazioni del provider:
- FilePath: {DOCUMENT_ROOT}\App_Data\redirectmappings.txt (si noti l'utilizzo di {DOCUMENT_ROOT} nel percorso del file. Questa operazione viene sostituita con il percorso effettivo durante l'inizializzazione del provider. Ciò è utile quando non si vuole inserire un percorso di file assoluto nel file web.config)
- IgnoreCase: 1
- Separatore: "," (se non specificato, il simbolo TAB verrà usato come separatore)
Chiamata di FileMapProvider da una regola di riscrittura
Nella directory radice di un sito Web aprire il file web.config . Se si usa il sito Web predefinito iis, il file deve trovarsi nella C:\inetpub\wwwroot\
cartella .
Incollare la regola di reindirizzamento seguente nel file web.config all'interno dell'elemento /<configuration>/<system.webServer>/<rewrite>/<rules>
:
<rule name="FileMapProviderTest" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{FileMap:{R:1}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" />
</rule>
Il contenuto completo del file web.config dovrebbe essere simile al seguente:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<providers>
<provider name="FileMap" type="FileMapProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<settings>
<add key="FilePath" value="{DOCUMENT_ROOT}\App_Data\redirectmappings.txt" />
<add key="IgnoreCase" value="1" />
<add key="Separator" value="," />
</settings>
</provider>
</providers>
<rules>
<rule name="FileMapProviderTest" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{FileMap:{R:1}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" />
</rule>
</rules>
</rewrite>
Questa regola esegue il reindirizzamento HTTP a un URL ottenuto da un file di testo tramite FileMapProvider. L'istanza fileMapProvider denominata "FileMap" viene richiamata dalla condizione della regola e se il risultato restituito dal provider non è vuoto, viene eseguito il reindirizzamento HTTP.
Per testare la regola, aprire un Web browser e effettuare una richiesta a http://localhost/old/catalog/product.html
o http://localhost/old/contactus/index.html
. Si noti che il browser viene reindirizzato a un nuovo URL in base ai mapping di reindirizzamento definiti nel file redirectmappings.txt. Il server Web restituirà l'errore HTTP 404 per l'URL reindirizzato perché non esiste un file o una directory di questo tipo nel server, ma ciò non è rilevante ai fini di questa procedura dettagliata. La parte importante è che il server Web ha emesso una risposta di reindirizzamento in base alla regola che ha usato FileMapProviders.
Uso di FileContainsProvider
FileContainsProvider legge il set di stringhe da un file di testo e quindi controlla se la stringa di input del provider contiene una di queste stringhe come sottostringa. Il provider può essere usato, ad esempio, con regole di riscrittura che bloccano l'accesso in base all'intestazione dell'agente utente.
Creazione di un file user-agents non consentito di esempio
Creare una nuova directory denominata App_Data nella directory radice del sito Web. In tale directory creare un file di testo denominato disalloweduseragents.txt. Aggiungere le righe seguenti al file :
badrobot1
badrobot2
AVVERTIMENTO: Assicurarsi sempre che il file di testo non sia direttamente accessibile dal Web. Usare il modulo di filtro richieste IIS o posizionare il file all'interno di App_Data cartella per impedire ai client HTTP di accedere direttamente al contenuto di questo file.
Configurazione di FileContainsProvider
Configurare FileMapProvider seguendo la stessa procedura descritta in Configurazione di DbProvider. Usare questi valori per le impostazioni del provider:
- FilePath: {DOCUMENT_ROOT}\App_Data\disalloweduseragents.txt (si noti l'utilizzo di {DOCUMENT_ROOT} nel percorso del file. Questa operazione viene sostituita con il percorso effettivo durante l'inizializzazione del provider. Ciò è utile quando non si vuole inserire un percorso di file assoluto nel file web.config)
- IgnoreCase: 1
Chiamata di FileContainsProvider da una regola di riscrittura
Nella directory radice di un sito Web aprire il file web.config . Se si usa il sito Web predefinito iis, il file deve trovarsi nella C:\inetpub\wwwroot\
cartella .
Incollare la regola di reindirizzamento seguente nel file web.config all'interno dell'elemento /<configuration>/<system.webServer>/<rewrite>/<rules>
:
<rule name="FileContainsProviderTest" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{FileContains:{HTTP_USER_AGENT}}" pattern=".+" />
</conditions>
<action type="AbortRequest" />
</rule>
Il contenuto completo del file web.config dovrebbe essere simile al seguente:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<providers>
<provider name="FileContains" type="FileContainsProvider, Microsoft.Web.Iis.Rewrite.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<settings>
<add key="FilePath" value="{DOCUMENT_ROOT}\App_Data\disalloweduseragents.txt" />
<add key="IgnoreCase" value="1" />
</settings>
</provider>
</providers>
<rules>
<rule name="FileContainsProviderTest" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{FileContains:{HTTP_USER_AGENT}}" pattern=".+" />
</conditions>
<action type="AbortRequest" />
</rule>
</rules>
</rewrite>
Questa regola interrompe la connessione HTTP se l'agente utente della richiesta HTTP corrisponde a una delle stringhe elencate nel file disalloweduseragents.txt. L'istanza FileContainsProvider denominata "FileContains" viene richiamata dalla condizione della regola e se il risultato restituito dal provider non è vuoto, la connessione HTTP viene interrotta.
Per testare la regola aprire WFetch e aggiungere un'intestazione user-agent alla richiesta come indicato di seguito:
user-agent: badrobot1\r\n
Da WFetch effettuare una richiesta a http://localhost/test/
. Si noterà che la connessione viene interrotta perché la stringa dell'agente utente corrisponde a una delle stringhe nel file disalloweduseragents.txt.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per