Bagikan melalui


Menggunakan Penulisan Ulang Peta di Modul Penulisan Ulang URL

oleh Ruslan Yakushev

Panduan ini akan memperkenalkan Anda pada konsep peta penulisan ulang dalam modul penulisan ulang URL dan akan memandu Anda cara membuat aturan penulisan ulang yang menggunakan peta penulisan ulang. Dalam panduan ini Anda akan membuat dua peta penulisan ulang: satu peta penulisan ulang akan digunakan oleh aturan yang melakukan penulisan ulang url, dan peta penulisan ulang lainnya akan digunakan oleh aturan yang melakukan pengalihan ke domain lain.

Latar belakang

Peta penulisan ulang adalah kumpulan pasangan nama dan nilai sewenang-wenang yang dapat digunakan dalam aturan penulisan ulang untuk menghasilkan URL pengganti selama penulisan ulang. Penulisan ulang peta sangat berguna ketika Anda memiliki sekumpulan besar aturan penulisan ulang dan semua aturan ini menggunakan string statis (yaitu, ketika tidak ada pencocokan pola yang digunakan). Dalam kasus tersebut, alih-alih menentukan sekumpulan besar aturan penulisan ulang sederhana, Anda dapat memasukkan semua pemetaan ke dalam peta penulisan ulang–sebagai kunci dan nilai–antara URL input dan URL pengganti. Kemudian, untuk mencari URL pengganti berdasarkan URL input, Anda akan memiliki satu aturan penulisan ulang yang mereferensikan peta penulisan ulang ini.

Prasyarat

Panduan ini memerlukan prasyarat berikut:

  1. IIS 7.0 atau lebih tinggi dengan layanan peran ASP.NET diaktifkan
  2. Rilis Go Live penulisan ulang URL terinstal

Menyiapkan halaman web pengujian

Untuk menunjukkan fungsionalitas penulisan ulang peta, kita akan menggunakan halaman asp.net pengujian sederhana. Halaman ini membaca variabel server web dan menghasilkan nilainya di browser.

Salin kode ASP.NET berikut dan masukkan ke %SystemDrive%\inetpub\wwwroot\ dalam folder dalam file bernama article.aspx:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
      <h1>URL Rewrite Module Test Page</h1>
      <table>
            <tr>
                  <th>Server Variable</th>
                  <th>Value</th>
            </tr>
            <tr>
                  <td>Original URL: </td>
                  <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
            </tr>
            <tr>
                  <td>Final URL: </td>
                  <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
      </table>
</body>
</html>

Setelah menyalin file ini, telusuri http://localhost/article.aspx dan periksa apakah halaman dirender dengan benar di browser.

Cuplikan layar yang memperlihatkan halaman pengujian yang dirender di browser.

Membuat peta untuk penulisan ulang

Pertama, kami akan membuat peta penulisan ulang dan aturan penulisan ulang yang akan digunakan untuk melakukan penulisan ulang URL berdasarkan serangkaian pemetaan statis antara URL asli dan URL yang ditulis ulang. Untuk membuat peta penulisan ulang, ikuti langkah-langkah berikut:

  1. Buka Manajer IIS

  2. Pilih "Situs Web Default"

  3. Di Tampilan Fitur klik "Penulisan Ulang URL"
    Cuplikan layar yang memperlihatkan Penulisan Ulang U R L dalam Tampilan Fitur.

  4. Di panel "Tindakan" di sisi kanan, klik "Lihat peta penulisan ulang...":
    Cuplikan layar yang memperlihatkan Tampilkan peta penulisan ulang...

  5. Di panel "Tindakan" di situs sebelah kanan, klik "Tambahkan peta penulisan ulang..." lalu masukkan nama peta penulisan ulang sebagai "StaticRewrites":
    Cuplikan layar yang memperlihatkan kotak Tulis ulang nama peta.

  6. Pada halaman untuk peta penulisan ulang yang baru dibuat, di panel "Tindakan" di sisi kanan, klik "Tambahkan entri pemetaan..." lalu masukkan kotak teks "/article" dan "/article.aspx?id=1&title=some-title" untuk kotak teks "Nilai asli:" dan "Nilai baru:". Nilai asli menentukan jalur URL apa yang ingin kita tulis ulang; nilai baru menentukan jalur URL yang ingin kita tulis ulang.
    Cuplikan layar yang memperlihatkan nilai Asli dan kotak Nilai baru.

  7. Ulangi langkah 6 untuk menambahkan pemetaan berikut ke peta penulisan ulang:

    Nilai Asli: Nilai Baru:
    /some-title /article.aspx?id=1&title=some-title
    /post/some-title.html /article.aspx?id=1&title=some-title

Sekarang buka file web.config untuk situs web Anda (jika Anda menggunakan situs web default maka web.config dapat ditemukan di %SystemDrive%\inetpub\wwwroot). Anda akan melihat bagian berikut:

<rewrite>
    <rewriteMaps>
        <rewriteMap name="StaticRewrites" defaultValue="">
            <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
            <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
            <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
        </rewriteMap>
    </rewriteMaps>
</rewrite>

Peta penulisan ulang ini, yang disebut "StaticRewrites", akan digunakan untuk menulis ulang URL masuk (didefinisikan sebagai kunci dalam peta penulisan ulang) ke representasi internalnya (didefinisikan sebagai nilai). Atribut defaultValue menentukan nilai apa yang akan digunakan jika URL masuk belum ditentukan dalam peta. Dalam hal ini string kosong akan dikembalikan.

Perhatikan bahwa tidak ada pola umum yang jelas dalam kunci dan hubungannya dengan nilai. Ini berarti bahwa tidak mungkin untuk menggunakan ekspresi reguler atau kartubebas untuk menentukan logika transformasi URL. Lebih lanjut, ini berarti bahwa jika kita tidak menggunakan peta penulisan ulang, kita harus membuat tiga aturan penulisan ulang. Dengan peta penulisan ulang, kita hanya dapat membuat satu aturan penulisan ulang. Bagian berikutnya menjelaskan cara membuat aturan penulisan ulang yang menggunakan peta penulisan ulang ini.

Mereferensikan peta penulisan ulang dari aturan penulisan ulang

Untuk membuat aturan penulisan ulang yang menggunakan peta penulisan ulang, salin dan tempel kode XML berikut ke <rewrite> bagian file web.config untuk situs web Anda:

<rules>
    <rule name="Rewrite Rule">
        <match url=".*" />
        <conditions>
            <add input="{StaticRewrites:{REQUEST_URI}}" pattern="(.+)" />
        </conditions>
        <action type="Rewrite" url="{C:1}" />
    </rule>
</rules>

Mari kita lihat setiap elemen aturan untuk memahami apa yang dilakukannya:
<match url=".*" /> - elemen ini memberi tahu modul penulisan ulang URL untuk mencocokkan URL masuk apa pun (dengan menggunakan karakter khusus ekspresi reguler ".")

<add input="{StaticRewrites:{REQUEST\_URI}}" pattern="(.+)"> - pemeriksaan kondisi ini adalah nilai yang dikembalikan dari peta penulisan ulang StaticRewrites bukanlah string kosong. Untuk melakukan pemeriksaan ini, nilai variabel server REQUEST_URI diteruskan sebagai parameter ke peta penulisan ulang. Jika peta penulisan ulang berisi entri dengan kunci, itu sama dengan REQUEST_URI, maka nilai yang sesuai dengan kunci tersebut akan dikembalikan. Pola ekspresi reguler hanya akan cocok dengan string yang tidak kosong, jadi jika string kosong dikembalikan dari peta maka kondisi akan mengevaluasi ke false, sehingga tidak ada penulisan ulang yang akan dilakukan. Jika string tidak kosong dikembalikan maka string tersebut akan diambil dalam referensi belakang, karena tanda kurung yang digunakan dalam pola.

<action type="Rewrite" url="{C:1}" /> - elemen ini menentukan bahwa modul penulisan ulang URL perlu menulis ulang string URL saat ini dengan yang baru yang diekstrak dari peta penulisan ulang. Perhatikan bahwa atribut url mereferensikan referensi kembali kondisi {C:1}, yang telah diatur ketika pola dalam kondisi dicocokkan.

Menguji aturan untuk penulisan ulang

Untuk menguji aturan penulisan ulang yang menggunakan peta "StaticRewrites", buka browser web dan minta salah satu URL berikut:

http://localhost/article1
http://localhost/some-title
http://localhost/post/some-title.html

Salah satu URL di atas harus menyebabkan URL ditulis ulang sesuai dengan pemetaan yang ditentukan dalam peta penulisan ulang. Hasil Anda akan terlihat seperti halaman berikut:

Cuplikan layar yang memperlihatkan hasil pengujian.

Menggunakan peta penulisan ulang untuk pengalihan

Sekarang kita akan membuat peta penulisan ulang lain yang akan digunakan untuk menentukan pemetaan statis antara URL sumber dan URL pengalihan. Untuk membuat peta penulisan ulang, ikuti langkah yang sama seperti yang dijelaskan di bagian "Membuat peta untuk penulisan ulang", tetapi beri nama peta penulisan ulang sebagai "StaticRedirects" dan gunakan nilai berikut untuk entri pemetaan:

Nilai Asli: Nilai Baru:
/old-article.aspx?id=1 /article.aspx?id=1
/posts/default.aspx?id=1 /article.aspx?id=1
/old-title.html /article.aspx?id=1

File web.config untuk situs web Anda sekarang harus berisi dua peta penulisan ulang ini:

<rewriteMaps>
    <rewriteMap name="StaticRewrites">
        <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
    </rewriteMap>
    <rewriteMap name="StaticRedirects">
        <add key="/old-article.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/posts/default.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/old-title.html" value="/article.aspx?id=1" />
    </rewriteMap>
</rewriteMaps>

Untuk membuat aturan yang menggunakan peta penulisan ulang StaticRedirects, salin dan tempel definisi aturan berikut ke dalam file web.config untuk situs web Anda:

<rules>
    <rule name="Redirect Rule" stopProcessing="true">
        <match url=".*" />
        <conditions>
            <add input="{StaticRedirects:{REQUEST_URI}}" pattern="(.+)" />
        </conditions>
        <action type="Redirect" url="http://localhost{C:1}" appendQueryString="False" redirectType="Permanent" />
    </rule>
</rules>

Sekali lagi, mari kita lihat setiap elemen aturan untuk memahami apa yang dilakukannya:
<match url=".*" /> - elemen ini memberi tahu modul penulisan ulang URL untuk mencocokkan URL masuk apa pun (dengan menggunakan karakter khusus ekspresi reguler ".")

<add input="{StaticRedirects:{REQUEST\_URI}}" pattern="(.+)"> - pemeriksaan kondisi ini adalah nilai yang dikembalikan dari peta penulisan ulang StaticRedirects bukan string kosong. Untuk melakukan pemeriksaan ini, nilai variabel server REQUEST_URI diteruskan sebagai parameter ke peta penulisan ulang. Jika peta penulisan ulang berisi entri dengan kunci, itu sama dengan REQUEST_URI, maka nilai yang sesuai dengan kunci tersebut akan dikembalikan. Pola ekspresi reguler hanya akan cocok dengan string yang tidak kosong, jadi jika string kosong dikembalikan dari peta maka kondisi akan mengevaluasi ke false, sehingga tidak ada penulisan ulang yang akan dilakukan. Jika string tidak kosong dikembalikan maka string tersebut akan diambil dalam referensi belakang, karena tanda kurung yang digunakan dalam pola.

<action type="Redirect" url="http://localhost{C:1}" appendQueryString="False" redirectType="Permanent" /> - elemen ini menentukan bahwa modul penulisan ulang URL perlu mengalihkan klien web ke URL baru yang dibangun dengan menggabungkan nama domain baru (dalam hal ini adalah domain yang sama untuk tujuan kesederhanaan) dan jalur URL pengalihan yang dikembalikan oleh peta StaticRedirects.

Menguji aturan untuk pengalihan

Untuk menguji aturan penulisan ulang yang menggunakan peta "StaticRedirects", buka browser web dan minta salah satu URL berikut:

http://localhost/old-article
http://localhost/posts/default.aspx?id=1
http://localhost/old-title.html

Salah satu URL di atas harus menyebabkan browser dialihkan ke http://localhost/article.aspx?id=1.

Menggunakan peta penulisan ulang untuk parameter string kueri

Penggunaan peta penulisan ulang tidak terbatas pada contoh yang disebutkan di atas. Peta penulisan ulang adalah kumpulan generik pasangan kunci-nilai yang dapat digunakan di mana saja dalam aturan penulisan ulang. Untuk mengilustrasikan hal ini, mari kita buat peta penulisan ulang yang dapat digunakan untuk manipulasi parameter string kueri.

Buat peta penulisan ulang ketiga, dengan mengikuti langkah yang sama seperti yang dijelaskan di bagian "Membuat peta untuk penulisan ulang". Beri nama peta penulisan ulang sebagai "IDtoTitleMap" dan gunakan nilai berikut untuk entri pemetaan:

Nilai Asli: Nilai Baru:
1 beberapa judul-1
2 beberapa judul-2
3 beberapa judul-3

File web.config untuk situs web Anda sekarang harus berisi dua peta penulisan ulang ini:

<rewriteMaps>
    <rewriteMap name="StaticRewrites">
        <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
    </rewriteMap>
    <rewriteMap name="StaticRedirects">
        <add key="/old-article.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/posts/default.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/old-title.html" value="/article.aspx?id=1" />
    </rewriteMap>
    <rewriteMap name="IDtoTitleMap">
        <add key="1" value="some-title-1" />
        <add key="2" value="some-title-2" />
        <add key="3" value="some-title-3" />
    </rewriteMap>
</rewriteMaps>

Untuk membuat aturan yang menggunakan peta penulisan ulang IDtoTitleMap , salin dan tempel definisi aturan berikut ke dalam file web.config untuk situs web Anda:

<rules>
    <rule name="Query String Rule" stopProcessing="true">
        <match url="^article\.aspx$" />
        <conditions>
            <add input="{QUERY_STRING}" pattern="(?:^|&)id=([0-9]+)(?:&|$)" />
            <add input="{IDtoTitleMap:{C:1}}" pattern="(.+)" />
        </conditions>
        <action type="Redirect" url="article.aspx?title={C:1}" appendQueryString="False" 
                                                            redirectType="Permanent" />
    </rule>
</rules>

Mari kita lihat setiap elemen aturan untuk memahami apa yang dilakukannya:
<match url="^article\.aspx$" /> - elemen ini memberi tahu modul penulisan ulang URL untuk menjalankan aturan ketika file article.aspx diminta.

<add input="{QUERY\_STRING}" pattern="(?:^|&amp;)id=([0-9]+)(?:&amp;|$)" /> - kondisi ini memeriksa apakah string kueri berisi id parameter yang memiliki nilai numerik. Nilai aktual diambil dalam referensi kembali kondisi. Perhatikan bahwa pola ini akan berfungsi meskipun ada parameter lain pada string kueri.

<add input="{IDtoTitleMap:{C:1}}" pattern="(.+)" /> - kondisi ini memeriksa apakah nilai yang dikembalikan dari peta penulisan ulang IDtoTitleMap bukan string kosong. Kondisi ini menggunakan referensi belakang dari pola kondisi sebelumnya sebagai input ke peta penulisan ulang.

<action type="Redirect" url="article.aspx?title={C:1}" appendQueryString="False" redirectType="Permanent" /> - elemen ini menentukan bahwa modul penulisan ulang URL perlu mengalihkan klien web kembali ke file article.aspx tetapi dengan judul parameter string kueri yang berbeda, yang memiliki nilai yang dicari di peta penulisan ulang.

Menguji aturan untuk string kueri

Untuk menguji aturan penulisan ulang yang menggunakan peta "IDtoTitleMap", buka browser web dan minta salah satu URL berikut:

http://localhost/article.aspx?id=1. Ini akan dialihkan ke http://localhost/article.aspx?title=some-title-1. http://localhost/article.aspx?someparam=somevalue&id=2. Ini akan dialihkan ke http://localhost/article.aspx?title=some-title-2

Ringkasan

Dalam panduan ini, Anda telah mempelajari cara menggunakan peta penulisan ulang untuk menentukan pemetaan URL untuk aturan penulisan ulang dan pengalihan. Anda juga telah mempelajari cara menggunakan peta penulisan ulang untuk memanipulasi parameter string kueri.

Peta penulisan ulang memungkinkan Anda mengurangi jumlah aturan penulisan ulang saat menulis ulang dan mengalihkan URL adalah logika statis dan penulisan ulang tidak dapat diekspresikan dengan menggunakan teknik pencocokan pola apa pun.