Saya sudah lama tidak menulis artikel teknis. Jika Anda belum memahaminya, baca saja beberapa artikel lagi, atau balas di akhir artikel (ini cara paling efektif). untuk membantu anda menjawab keraguan anda.
Saya datang ke sini untuk mencari artikel ini, anda semua harusnya mengetahui apa itu nama domain tingkat kedua, jadi saya tidak akan berbicara omong kosong terlebih dahulu.
Masalah yang banyak teman-teman tidak dapat pahami (saya juga tidak dapat memahaminya beberapa hari yang lalu) adalah setelah saya mengetikkan alamat, mengapa URL-nya ditulis ulang?
Langkah 1: Ketikkan alamat ke browser, seperti http://blog.downcodes.com , dan klik Enter.
Untuk menyederhanakan masalahnya, izinkan saya menjelaskannya seperti ini:
Langkah 2: Pertama, alamat yang diketik diurai dan akhirnya sampai ke server web. Alamat tersebut diserahkan ke IIS untuk diproses. Di dunia .net, IIS akan menyerahkan permintaan tersebut ke pemroses web untuk diproses Pemroses web mengembalikan hasil pemrosesan ke browser dan menampilkannya kepada pengguna.
Tolong jangan abaikan masalah ini. Segala sesuatu di langkah kedua dilakukan di sisi server. Ketika hal ini terjadi, alamat di browser klien tidak akan berubah. Bahkan jika prosesor web mengembalikan hasil pemrosesan di waktu akhir , alamat di atas tidak akan berubah.
URL yang Anda ketik di awal hanya berfungsi sebagai ketukan di pintu. Setelah pintu diketuk, fungsinya selesai. Hanya mata Anda yang dapat melihat alamatnya.
Masalah yang perlu dipahami adalah bahwa apa yang disebut penulisan ulang URL hanyalah cerita internal yang diketahui oleh pengembang web. Pengguna tidak tahu apa yang sedang terjadi. Dia berpikir bahwa alamat yang dia ketik adalah hasil yang seharusnya ditampilkan Dengan kata lain, kami Mengontrol apa yang ditampilkan di balik layar.
Hal selanjutnya yang perlu diperhatikan adalah bagaimana mengontrol konten yang ditampilkan?
Dari proses yang disebutkan di atas, terlihat jelas bahwa kerja prosesor web perlu dimanipulasi.
Salah satu pertimbangan paling sederhana adalah pengguna memasukkan alamat sederhana tanpa parameter apa pun, http://blog.downcodes.com , lalu Kami. ubah alamat ini ke alamat dengan parameter yang memenuhi kebutuhan program, http://kerry.com?lover=notus , dan terakhir proses.
Yang disebut penulisan ulang url ada pada langkah ini.
Dalam istilah .net, kita perlu mendaftarkan httpmodule agar aplikasi dapat menangani URL tertentu
Daftarkan httpmodule di web.config,
kira-kira setara dengan program ini
dalam program httpmodule yang kami sediakan
// Gunakan program httpmodule kami untuk mencegat URL asli
String OriginalUrl=” http://blog.downcodes.com ”;
//Proses url asli dan dapatkan url terakhir yang diperlukan, nilainya http://kerry.com?lover=notus
String FinalUrl=Tulis Ulang(Url Asli);
// konteks mengirim ulang url secara internal ke IIS untuk diproses
konteks.RewritePath(FinalUrl);
Selanjutnya, kami menerapkan penulisan ulang url.
Langkah 1: Tentukan URL mana yang perlu ditulis ulang, yaitu merumuskan aturan penulisan ulang. Langkah 2: Tulis penangan httpmodule. Langkah 3: Integrasikan httpmodule yang tertulis ke dalam program web dan mulai
bekerja . , dan menggunakan penulisan ulang url untuk mengimplementasikan nama domain tingkat kedua, prosesnya sama. Karena apakah itu nama domain tingkat kedua atau nama domain tingkat ketiga, itu adalah alamat URL alamat URL ini, kami dapat memanipulasinya selama pemrosesan.
Tugas-tugas ini cukup merepotkan, namun ada pakar di Internet yang telah menulis program semacam itu untuk kami
. china/msdn/library/webservices/asp.net/URLRewriting.mspx
http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html
http://www.cnblogs.com/jzywh/ archive/2006/02/20/334004.htmlArtikel
telah selesai.
Dalam proses implementasi Anda akan menemui beberapa kendala yang sebagian besar disebabkan oleh tidak membaca artikel di atas dengan seksama, namun sejujurnya tidak mudah untuk membacanya. artikel yang panjang. Izinkan saya mencatat beberapa pertanyaan penting di bawah ini. Dua pertanyaan terakhir, Gunakan kode khusus untuk menunjukkan cara menangani URL target yang ditulis ulang untuk memenuhi persyaratan kami
Apa itu URLRewriter Microsoft? Di mana saya dapat mengunduh proyek ini?
Ini adalah contoh program yang disediakan dalam artikel di msdn yang memperkenalkan URLRewriter.
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Bagaimana cara menggunakan kode-kode ini?
Yang pasti, ini tidak merepotkan.
Unduh kode ke mesin Anda.
Setelah instalasi, tambahkan proyek URLRewriter ke proyek Anda sendiri, ikuti metode pada alamat yang diberikan di atas, ubah konfigurasi kode web.config, dan mulai gunakan.
Apa itu httpmodule?
Pemahaman sederhananya adalah bahwa ini adalah program yang memproses permintaan http. Untuk pemahaman lebih detail, silakan merujuk ke dokumentasi SDK.
Bagaimana cara menerapkan resolusi pan?
Pertama, tambahkan nama domain tingkat kedua *.kerry.com ke penyedia layanan nama domain, yang menunjuk ke IP server Anda
Kemudian, buat situs di IIS, biarkan header host situs ini kosong, dan port umumnya adalah 80. Situs ini adalah situs web default untuk seluruh port server 80.
Tambahkan pemetaan aplikasi wildcard ke situs ini (Properti Situs IIS->Direktori Rumah->Konfigurasi). Tujuan pemetaan ini adalah agar asp.net ISAPI mengambil alih situs nama domain sekunder yang tidak ditentukan di IIS.
Apa yang terjadi jika Anda memasukkan nama domain tingkat kedua?
Ketika IIS mendeteksi bahwa URL yang masuk adalah nama domain tingkat kedua, pertama-tama IIS akan memeriksa apakah ada situs yang terdaftar dengan nama domain tingkat kedua ini di IIS. Jika ya, maka akan ditransfer ke situs ini, jika tidak maka akan ditransfer ke Situs default, situs default ini adalah situs dengan header host yang dikonfigurasi sebelumnya dan kosong. Oleh karena itu, port hanya dapat memiliki satu situs dengan header host kosong.
Kami telah menyiapkan asp.net ISAPI untuk mengambil alih anak-anak tunawisma ini. Tulis program untuk menganalisis URL masuk dan melakukan penulisan ulang.
Mengapa httpmodule saya sepertinya tidak berfungsi?
Setelah mengatur breakpoint di program httpmodule, apa pun yang terjadi, prosesnya tidak berjalan dari sini. Alasannya adalah Anda belum mendaftarkan program httpmodule Anda ke program web selesai di web.config Selesai di.
<sistem.web>
<httpModul>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModul>
</sistem.web>
Mengapa saya selalu ditanya dengan "Kesalahan RewriterConfig bagian konfigurasi tidak dikenal"?
Ini karena Anda belum mendaftarkan bagian konfigurasi RewriterConfig Anda dengan program web.
<configBagian>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configBagian>
Anda kemudian dapat mengonfigurasi aturan menggunakan bagian RewriterConfig di <configuration>.
Di bagian httpmodule mana url diproses?
Sebagian besar pekerjaan ada di metode URLRewriter.ModulRewrite().
jika (re.IsMatch(requestedPath))
Tentunya ini menentukan apakah url yang masuk adalah url yang ingin kita tulis ulang.
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, aturan[i].SendTo));
URL target yang dikonfigurasi di web.config diterima di sini.
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Tulis ulang url secara internal.
Saya tidak ingin melakukan hard-code pada nama domain tingkat kedua di web.config, dan URL target yang ingin saya tulis ulang tidak dapat di-hard-code, misalnya, jika kita memerlukannya
Halaman pemrosesan sebenarnya dari blog.downcodes.com adalah kerry.com/action.aspx?id=1
Halaman pemrosesan sebenarnya dari call.kerryl.com adalah kerry.com/action.aspx?id=2
Halaman pemrosesan sebenarnya dari walkwith.kerry.com adalah kerry.com/walk.aspx
Bagaimana cara menghadapinya?
Saat ini, Anda perlu melakukan beberapa manipulasi pada kode yang disebutkan di atas.
jika (re.IsMatch(requestedPath))
{
//Temukan nama domain tingkat kedua di url
string [] UserHost = app.Request.Url.Host.Split ( Char baru [] { '.' } );
string domain2=UserHost [0];
//Tetapkan url target untuk ditulis ulang sesuai kebutuhan
string kirimToUrl;
if(domain2==”Cinta”)
sendToUrl =”/action.aspx?id=1”;
lain jika(domain2==” panggilan”)
sendToUrl =”/action.aspx?id=2”;
else if(domain2==”berjalan dengan”)
sendToUrl =”/walk.aspx”;
RewriterUtils.RewriteUrl(aplikasi.Konteks, sendToUrl);
}
Saat mengonfigurasi aturan di web.config, Anda perlu melakukan ini
<Aturan Penulis Ulang>
<LookFor>http://(w+).kerry.com</LookFor>
<SendTo>/test.aspx</SendTo>
</Aturan Penulis Ulang>
(w+) digunakan untuk mencocokkan string apa pun. Anda dapat menulis apa pun di test.aspx di sini, karena kami tidak menggunakannya sama sekali.
Saya memiliki banyak situs dengan nama domain tingkat kedua yang tidak pasti, tetapi halaman setiap situs ditentukan. Konten setiap situs nama domain tingkat kedua sebenarnya diambil dari database berdasarkan ID yang berbeda.
Situasinya seperti ini
http://localhost/kerry/action.aspx?id=1 blog.downcodes.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx
Lulus sekarang Ketika saya naik, parameter id tidak dapat ditampilkan dan diubah menjadi nama domain tingkat kedua. Apa yang harus saya lakukan saat ini
?
<Aturan Penulis Ulang>
<LookFor>http://(w+).kerry .com walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</Aturan Penulis Ulang>
Kemudian tangani seperti ini di program
//Dapatkan nama domain tingkat kedua
string [] UserHost = app.Request.Url.Host.Split ( Char baru [] { '.' } );
string domain2=UserHost [0];
Dapatkan nomor berbeda berdasarkan nama domain
int id=getIDdariDomain(domain2);
//Dapatkan url dasar untuk dialihkan
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, aturan[i].SendTo));
//Tambahkan parameter id
jika(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
kalau tidak
sendToUrl=”kesalahan.aspx”;
//Menulis kembali
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Saya mencari secara online dan ada solusi lain...
Mungkin Anda merujuk ke artikel ini
http://blog.csdn.net/mengyao/archive/2007/01/25/ 1493537 .aspx
Seperti yang Anda lihat, metode dasarnya sama. Alasan mengapa ini tidak tercantum di atas adalah karena pendekatan ini agak rumit dan mungkin tidak mudah dipahami pada awalnya itu di akhir Membaca artikel ini lagi mungkin akan membuat Anda tersenyum sadar
Selamat pemrograman
Ps terakhir: Saya berencana untuk menerbitkan artikel ini dalam beberapa hari, tetapi sekarang, saya tidak sengaja menghapus semua program yang saya tulis beberapa hari terakhir dari VSS. Itu masih tipe yang lengkap pengelola kode sumber dibuat oleh Microsoft-_ -