2011-08-17 37 views
5

Tôi đang cố gắng để tạo ra một viết lại mod để chỉ cần bật những liên kết này:Simple Mod Rewrite

/index.php?page=home 
/?page=home 

vào

/home 

Có thể ai đó chỉ cho tôi cách này được thực hiện? Trong khi chúng tôi đang ở trên chủ đề, có bất kỳ nguồn lực tốt để đọc lên trên mod viết lại? Cuộc đấu tranh lớn nhất của tôi cho đến nay là tôi không thấy bất kỳ cách nào để gỡ lỗi nó; mọi thứ có thể hoạt động hoặc không.

Trả lời

6

Có nhiều cách để thực hiện việc này. Cái này áp dụng các quy tắc để bất kỳ tập tin không tồn tại:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?page=$1 [L] 

Edit: Bạn có thể phải thêm RewriteEngine on ở phía trên, và điều này đi trong .htaccess trong gốc tài liệu web của bạn. Tất cả điều này, tất nhiên, phụ thuộc vào việc sử dụng htaccess (mod_rewrite) được cho phép bởi máy chủ web của bạn và cho dù các tập tin ghi đè quy tắc nên được đặt tên .htaccess. Cả hai đều khá phổ biến, vì vậy nó không phải là một vấn đề.

+0

Cảm ơn, đây thực sự là những gì tôi cần, ý của bạn là gì "áp dụng quy tắc cho bất kỳ tệp nào không tồn tại"? –

+0

Chắc chắn! Dòng 'RewriteRule' chỉ được áp dụng nếu yêu cầu không khớp với tệp trên hệ thống tệp (dòng 1) hoặc thư mục trên hệ thống tệp (dòng 2). Nói cách khác, điều này vẫn cho phép bạn phục vụ bất kỳ tệp nào thực sự tồn tại và chuyển mọi thứ khác đến index.php –

+0

Ồ, rất tuyệt, cảm ơn bạn rất nhiều. –

4

Nếu tôi hiểu, bạn muốn người dùng cuối nhập example.com/home và đã viết lại vào /index.php?home?

RewriteEngine On 
# /home or/get redirected... 
RewriteRule ^(home)?$ /index.php?page=home [L,QSA] 

Để gỡ lỗi, bạn có thể bật RewriteLog. Tuy nhiên, như được đề xuất trong các chú thích, nó chỉ nên được sử dụng để gỡ lỗi. Tốt nhất là vô hiệu hóa nó hoặc thiết lập mức độ rất thấp trong sản xuất.

RewriteLog "/path/to/logs/rewrite.log" 
# Increase the log level (default 0, >4 gets pretty verbose) 
RewriteLogLevel 3 
+0

Thank you very much, điều này rất hữu ích. –

+1

Lưu ý nhỏ bên lề - "RewriteLogLevel 3' quá thấp để gỡ lỗi viết lại nghiêm trọng - nó sẽ chỉ cung cấp cho bạn tổng quan về những gì đang diễn ra mà không đi sâu vào chi tiết. Để xem chi tiết, hãy sử dụng Cấp 9 - tiết lộ chi tiết hơn nhiều. – LazyOne

+1

Tôi sẽ thêm cảnh báo nghiêm trọng cho câu trả lời này về RewriteLog, vì nó có thể trở thành tài nguyên nếu bạn 'quên' về nó và nó thực sự không nên ở cấp cao hơn trong thời gian dài vì tệp đó sẽ trở thành gigabyte lớn hơn nhanh chóng ... – sg3s

3
RewriteRule .*\?page=(\w+)$ /$1/ [NC] 

Nên làm thủ thuật nhưng có thể bạn có thể cụ thể hơn trong trường hợp nào cần phải làm việc?

Heres một trang web, bạn có thể đọc lên trên htaccess

http://corz.org/serv/tricks/htaccess2.php

+0

Cách tiếp cận thú vị, cảm ơn bạn. Vì vậy, không cần RewriteCond trong trường hợp này? –

+0

Đọc lại câu hỏi của bạn sau khi chỉnh sửa Tôi nhận ra đây không phải là những gì bạn muốn làm ... Đối với các url đẹp, hãy xem Matts trả lời. Trang web tôi đưa ra vẫn là một tài nguyên tốt đẹp mặc dù :) – sg3s