2010-01-26 22 views
6
rewriteengine on 
rewriterule ^/a/b$ ^/c$ 

không làm việc, nhưngCó gì sai với RewriteRule của tôi qua .htaccess? (Tại sao nó cần RewriteBase?)

rewriteengine on 
rewritebase/
rewriterule ^a/b$ ^c$ 

công trình.

+1

@ unknown-- đây là một câu hỏi hay. Nếu bạn không có ai cắn ở đây, bạn có thể thử chuyển nó đến serverfault.com. Tôi cũng khuyến khích bạn chấp nhận câu trả lời cho nhiều câu hỏi của bạn và thậm chí có thể trả lời một số câu hỏi trong quá trình ... –

Trả lời

1

Bạn đang sử dụng phiên bản Apache nào? RewriteBase không cần thiết khi bạn đang viết lại từ gốc. Nếu bạn không, bạn có thể cần nó. Ví dụ, một phần của cấu hình hiện tại của tôi (Apache 2.2) cho một trong các blog của tôi trông như sau, và các công trình:

RewriteEngine On  
RewriteRule ^/$ /blog/ [R] 
RewriteRule ^/wordpress/(.*) /blog/$1 [R] 
11

Đó là lẽ không phải là RewriteBase mà làm cho các quy tắc hoạt động quá nhiều như dấu gạch chéo hàng đầu. Ngoài ra, đối số thứ hai của RewriteRule không phải là một biểu thức chính quy. Thay vào đó, hãy thử:

RewriteRule ^/?a/b$ c 

Khi áp dụng RewriteRule từ .htaccess, dấu gạch chéo hàng đầu sẽ bị tước khỏi URL, điều này sẽ làm cho mẫu thất bại nếu bạn bao gồm. Bằng cách bắt đầu một mẫu với "^ /?", Nó sẽ hoạt động trong các tệp cấu hình chính và trong các tệp cấu hình cho mỗi thư mục.

Đọc qua số detailed mod_rewrite documentation để biết chi tiết về cách công cụ ghi đè hoạt động và ý nghĩa của RewriteBase.

Edit: Như đã đề cập trong mod_rewrite technical details và được mô tả trong tài liệu hướng dẫn cho RewriteRuleRewriteBase, URL đã được dịch sang một con đường vào thời điểm các quy tắc viết lại mỗi thư mục được đánh giá. Công cụ viết lại không còn có URL để làm việc. Thay vào đó, nó loại bỏ tiền tố thư mục cục bộ (thư mục chứa tệp .htaccess), kết thúc bằng dấu gạch chéo. Ví dụ: giả sử khách truy cập yêu cầu "/var/www/foo/bar/baz.html" và có một quy tắc ghi lại được đặt trong "/var/www/foo/.htaccess". Trước mỗi quy tắc, công cụ viết lại sẽ ngắt "/ var/www/foo /", để "bar/baz.html" được đối sánh với quy tắc viết lại. Sau khi xử lý quy tắc, tiền tố thư mục cục bộ được thêm vào trước (trừ khi thay thế bắt đầu bằng "http: //"). Sau khi tất cả các quy tắc viết lại đã được xử lý, cơ sở viết lại, nếu được đặt, thay thế tiền tố thư mục cục bộ; nếu không, gốc tài liệu bị tước. URL được viết lại sau đó được tiêm lại dưới dạng yêu cầu phụ.

+0

Bạn có thể giải thích lý do tại sao dấu gạch chéo hàng đầu bị tước khi áp dụng từ '.htaccess'? – user198729

Các vấn đề liên quan