2013-09-06 92 views
5

Làm cách nào để ẩn thay đổi URL khi sử dụng ghi đè apache? Tôi đã tìm kiếm hàng giờ về vấn đề này và đã quyết định đến đây để tìm câu trả lời. Vì vậy, bất kỳ trợ giúp/đầu mối sẽ được đánh giá rất nhiều!Làm thế nào để ẩn thay đổi URL khi sử dụng apache viết lại?

Ngay bây giờ tôi đang sử dụng:

RewriteRule ^/Page/(.*)$ http://domain.com/page.cfm?pagevar=$1 [NC,L] 

Vấn đề với đó là, khi bạn đi hướng đến http://domain.com/Page/abc123 nó hoạt động. NHƯNG, nó thay đổi url trình duyệt thành http://domain.com/page.cfm?pagevar=abc123,

Tôi muốn thực hiện cùng một hành động đó, nhưng hiển thị http://domain.com/Page/abc123 làm url.

Xin vui lòng, bất kỳ thông tin chi tiết nào về điều này sẽ rất được đánh giá cao! Cảm ơn bạn lần nữa.

+0

[Đừng quên xem xét cách thưởng cho người dùng đã giúp bạn, cải thiện câu hỏi của bạn khi cần và các mẹo hữu ích khác về cách sử dụng trang web này tốt nhất.] (Http://stackoverflow.com/about) – Prix

Trả lời

7

Quy tắc đầu tiên sẽ chuyển hướng URL xấu của bạn đến định dạng URL đẹp.

Quy tắc thứ hai sẽ chuyển hướng nội bộ trở lại cho người dùng sẽ không thấy URL xấu.

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

# Redirect /page.cfm?pagevar=abc123 to /Page/abc123 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+page\.cfm\?pagevar=([^&\s]+) [NC] 
RewriteRule^/Page/%1? [R=301,L] 

# Internally forward /Page/abc123 to /page.cfm?pagevar=abc123 
RewriteRule ^Page/(.*)/?$ /page.cfm?pagevar=$1 [QSA,NC,L] 

Các quy tắc trên đây được sử dụng trên .htaccess tập tin và giả định page.cfm là vào thư mục gốc của tên miền của bạn cùng với các tập tin .htaccess.

Giống như các ví dụ của bạn đề xuất.

+0

+1, bạn có thể muốn thêm cờ 'QSA' vào cuối' RewriteRule' – anubhava

+0

@anubhava cảm ơn, tôi đã xem xét điều đó nhưng điều đó chỉ áp dụng nếu anh ta thực sự muốn bất kỳ chuỗi truy vấn nào được mang theo định dạng URL mới. – Prix

+0

Có thỏa thuận nhưng bạn không bao giờ biết những yêu cầu viết lại này. Nhưng có OP không đề cập đến bất kỳ yêu cầu nào như vậy. – anubhava

0

Bạn cần loại bỏ phần http://domain.com của mục tiêu của quy tắc. Khi bạn có điều đó, hàm ý đó chuyển hướng trình duyệt thay vì viết lại nội bộ:

RewriteRule ^/Page/(.*)$ /page.cfm?pagevar=$1 [NC,L]