PDA

View Full Version : Hỏi về Rewrite URL



muahesoidong
19-06-2012, 17:22
Chào các bạn, mình có làm về rewrite url để làm url ảo theo hướng dẫn của bài này: http://tieuyeuit.wordpress.com/2010/11/20/asp-net-url-rewrite-huong-dan-rewrite-url-khong-can-cau-hinh-iis/. mình làm đúng như hướng dẫn và trong localhost mình test chạy ngon lành, nhưng khi đưa lên server thì nó báo đường dẫn không tồn tại, mình cũng cấu hình trong web.config trong tag <modules> để chạy iis7 nhưng vẫn không được. Mình nghĩ bên cho thuê host chưa hỗ trợ đuôi html, mình có hỏi thì họ bảo cấu hình rồi, nguyên nhân là do mình cấu hình trong web.config, mình không biết phải làm sao có bạn nào biết nguyên nhân tại sao không, chỉ mình với.

khoathi
19-06-2012, 17:40
Bạn đưa nội dung web.config của bạn lên xem có bị lỗi chỗ nào không?
Có lẽ bạn thiếu <system.webserver> rồi. Bạn thêm phần nào vào xem còn bị lỗi không.

<system.webServer>
<modules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</modules>
</system.webServer>

muahesoidong
19-06-2012, 18:44
Mình cho vào rồi mà, mình cấu hình trong web.config như này:
Tại configSections:
<configSections>
<sectionGroup name="modulesSection">
<section name="rewriteModule" requirePermission="false" type="RewriteModule.RewriteModuleSectionHandler, RewriteModule"/>
</sectionGroup>
</configSections>

mình thêm tag modulesSection để cho vào tag configSections

<modulesSection>
<rewriteModule>
<rewriteOn>true</rewriteOn>
<rewriteRules>
<rule source="vie/chitiet/(\d+)/(\d+)/(\d+)/(.+).html" destination="vie/chitiet/gioithieu.aspx?menuid=$1&amp;itemid=$2&amp;id=$3&amp;tieude=$3"/>
<rule source="vie/(\d+)/(\d+)/(.+).html" destination="vie/gioithieu.aspx?menuid=$1&amp;itemid=$2&amp;tieude=$3"/>
<rule source="vie/(\d+)/(.+).html" destination="vie/gioithieu.aspx?menuid=$1&amp;tieude=$2"/>
</rewriteRules>
</rewriteModule>
</modulesSection>

Tại tag httpModules:

<httpModules>
<add name="RewriteModule" type="RewriteModule.RewriteModule, RewriteModule"/>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

Tại tag system.webServer:

<modules>
<remove name="RewriteModule"/>
<add name="RewriteModule" type="RewriteModule.RewriteModule, RewriteModule"/>
</modules>

File RewriteModule.dll mình đã add vào Bin. mình cấu hình như này, trong phần local mình chạy rất ổn, vậy mà đưa lên host thì lại không được, host mình thuê bên Nhân Hòa

khoathi
20-06-2012, 14:47
Bạn dùng công cụ nào để rewrite vậy?

Bạn thử làm theo cách của mình xem được không?

http://webxaula.com/website/Rewrite-URL-trong-aspnet-21.html

Theo mình biết có một số host không hỗ trợ mình rewrite URL trong web.config mà phải viết thêm IIRF.ini mới được. Nếu làm theo cách của mình vẫn không được bạn thử liên hệ bên cung cấp host xem thế nào.

muahesoidong
20-06-2012, 17:03
Thanks các bạn đã nhiệt tình, sau một thời gian loay hoay xử lý, cuối cùng mình cũng tìm được các giải quyết, mình làm theo hướng dẫn của bài này: http://alphasolution.wordpress.com/2011/03/05/t%E1%BB%95ng-h%E1%BB%A3p-k%E1%BB%B7-thu%E1%BA%ADt-rewrite-url-website-asp-net-khong-c%E1%BA%A5u-hinh-host/

nhưng tội cái khi postback thì nó lại chuyển về đường dẫn thật là aspx và báo lỗi sai địa chỉ, và mình lại phải loay hoay tìm cách giải quyết, cuối cùng tìm được bài này:
http://thuvienit.com/rewrite-url-su-dung-intelligenciaurlrewriterdll-cua-urlrewriternet_topic5457.html

vậy là vấn đề Rewirter URL của mình đã được giải quyết triệt để. Khổ gà nên khổ thế đấy, còn một vấn đề nữa muỗn hỏi các bạn, khi mình gõ sai địa chỉ dù là phần mở rộng nào đi chăng nữa, hoặc không có phần mở rộng thị nó vẫn phải quay về trang báo lỗi Error404.aspx của mình, nhưng mình làm hoài không được, chỉ được mỗi đuôi là aspx thôi, có bạn nào biết giải quyết vấn đề này giúp mình với nhé. Thanks

trongitvn
22-06-2012, 11:45
thanks mọi người nha

Bean.it90
22-06-2012, 15:06
trongivvn làm được rồi ak

khoathi
22-06-2012, 23:36
Thanks các bạn đã nhiệt tình, sau một thời gian loay hoay xử lý, cuối cùng mình cũng tìm được các giải quyết, mình làm theo hướng dẫn của bài này: http://alphasolution.wordpress.com/2011/03/05/t%E1%BB%95ng-h%E1%BB%A3p-k%E1%BB%B7-thu%E1%BA%ADt-rewrite-url-website-asp-net-khong-c%E1%BA%A5u-hinh-host/

nhưng tội cái khi postback thì nó lại chuyển về đường dẫn thật là aspx và báo lỗi sai địa chỉ, và mình lại phải loay hoay tìm cách giải quyết, cuối cùng tìm được bài này:
http://thuvienit.com/rewrite-url-su-dung-intelligenciaurlrewriterdll-cua-urlrewriternet_topic5457.html

vậy là vấn đề Rewirter URL của mình đã được giải quyết triệt để. Khổ gà nên khổ thế đấy, còn một vấn đề nữa muỗn hỏi các bạn, khi mình gõ sai địa chỉ dù là phần mở rộng nào đi chăng nữa, hoặc không có phần mở rộng thị nó vẫn phải quay về trang báo lỗi Error404.aspx của mình, nhưng mình làm hoài không được, chỉ được mỗi đuôi là aspx thôi, có bạn nào biết giải quyết vấn đề này giúp mình với nhé. Thanks

Ý của bạn muốn là khi gõ sai địa chỉ thì nó sẽ chuyển về trang mặc định báo lỗi 404 do mình tự quyết định ?

nltt7777
23-06-2012, 12:47
Cái này có nhiều tutorial hướng dẫn, bạn chịu khó search sẽ thấy thui

baloctran86
27-06-2012, 08:53
Xài cái này hosting phải hỗ trợ URLRewrite mới chạy được phần mở rộng html, không thì khi chạy đuôi html nó sẽ ko sử dụng .nET để render ,nên báo lỗi không tìm thấy file --> URLRewrite bằng duôi aspx (như ko)

Mà host đã hỗ trợ URLRewrite thì xài module của IIS khỏe hơn ;))

muahesoidong
27-06-2012, 09:42
Ý của bạn muốn là khi gõ sai địa chỉ thì nó sẽ chuyển về trang mặc định báo lỗi 404 do mình tự quyết định ?

Ý mình là khi gõ sai địa chỉ nó vẫn vào trang báo lỗi 404 của mình, mình làm được có mỗi đuôi là aspx thôi, ví dụ mình gõ địa chỉ sai nhưng nếu không gõ thêm phần mở rộng là aspx thì nó vẫn báo lỗi không về trang 404 của mình CD: http://tenmien.com/jkfjdgkjdsfjkdlskafl thì không ra mà phải gõ http://tenmien.com/jkfjdgkjdsfjkdlskafl.aspx thì mới vào trang 404 của mình. Mình thấy trang http://bongdaplus.vn nó cũng viết bằng aspx mà nó làm được mà mình không thể làm được, có bạn nào biết về nó chỉ mình với nhé. Thanks

muahesoidong
27-06-2012, 10:23
Cái này có nhiều tutorial hướng dẫn, bạn chịu khó search sẽ thấy thui

Mình search nhiều trên mạng rồi, nhưng toàn hướng dẫn chung chung thôi à, mà cũng chỉ dùng được đuôi aspx như mình nói ở trên thôi.

baloctran86
15-09-2012, 16:15
Mình thấy trên mạng nói nhiều về vấn đề này lắm rồi.
Trường hợp của bạn xảy ra nguyên nhân là vì host chứ không phải vì code của bạn.

Mình VD nhé:
Bạn request 1 trang abc.aspx --> Server sẽ hiểu đây là 1 trang thuộc type .NET --> biên dịch = .NET-> bạn chỉ có thể URLRewrite với đuôi mở rộng là aspx

Bạn request 1 tranng abc.html hoặc khác --> Server sẽ hiểu đây là 1 trang tĩnh và không load module .NET --> không biên dịch được code .NET --> không hiểu URL Rewrite --> không chạy được URL Rewrite và bất cứ thứ gì code = .NET

Để server hỗ trợ cái này đòi hỏi host phải cài đặt URLRewrite
Lúc đó bạn có thể sử dụng đuôi mở rộng là html hoặc tùy ý

Mình đã thử với rất nhiều module hỗ trợ URL Rewrite như dll của các hãng , nhưng cũng chủ URLRewrite theo giới hạn mình nêu trên mà thôi.

Chúc bạn thành công!

khoathi
19-09-2012, 07:04
Bạn tham khảo bài viết này của mình thử xem. Hi vọng nó giúp được cho bạn http://webxaula.com/website/Tao-trang-thong-bao-loi-trong-aspnet-70.html

codaihai
25-03-2013, 15:16
nhân tiện cho mình hỏi là khi truyền tham số vào url thì có cái số id, giờ làm thế nào để bỏ dc cái id đó đi hoặc cho về dạng như thế này ( tieu-de-rewrite-12) trong đó 12 là cái id. mình thử làm như vậy rồi nhưng nó báo là không tìm thấy cái id đó.

hta1812
21-06-2013, 11:32
Thanks mọi người nhe.