2011-10-12 20 views
5

Tôi đang sử dụng các nguyên tắc sau để sử dụng thư mục cho các phiên bản khác nhau:Rewrite module để xử lý các thư mục phiên bản trang web (dải slash)

RewriteEngine On 
RewriteRule .* - [E=VERSION:020] 
RewriteRule ^versions/(.*)$ versions/$1 [L] 
RewriteRule ^(.*)$ versions/%{ENV:VERSION}/$1 [L] 

Tôi có một cấu trúc như:

http://domain.com/versions/020/ 
http://domain.com/versions/020/th?=1 
http://domain.com/versions/020/myfolder/ 
http://domain.com/versions/020/myfile.html 

Nhưng người dùng có thể thấy:

http://domain.com/ 
http://domain.com/th?=1 
http://domain.com/myfolder/ 
http://domain.com/myfile.html 

Tôi gặp sự cố cuối cùng với dấu gạch chéo hiển thị số phiên bản.

Một điểm mấu chốt thứ hai là (vẫn làm việc):

http://domain.com/site/

Nhưng vấn đề khi người dùng gõ url và bỏ qua các dấu gạch chéo kết thúc, như thế này:

http://domain.com/site

Người dùng hiện thấy số phiên bản như sau:

http://domain.com/versions/020/site/

Đây là vấn đề vì tôi không muốn người dùng tìm hiểu về các phiên bản khác.

Bất kỳ ý tưởng nào về cách tôi có thể giải quyết vấn đề?

+0

Một câu hỏi hay. – djhaskin987

Trả lời

1

Dường như điều này đang can thiệp vào mod_dir, theo mặc định, chuyển hướng trình duyệt khi trình duyệt cố gắng truy cập thư mục và dấu gạch chéo sau bị thiếu. Điều đang xảy ra là Rewrite đang diễn ra, thay đổi /site thành /versions/020/site thì mod_dir đang chuyển hướng trình duyệt đến http://domain.com/versions/020/site/. Do đó, trình duyệt sẽ thấy các phiên bản/020 công cụ trong thanh địa chỉ.

Bạn có thể tắt chuyển hướng tự động của mod_dir bằng "DirectorySlash Off" directive. Nhưng bạn có thể muốn thêm dấu gạch chéo theo sau bằng cách bao gồm chuyển hướng trước khi bất kỳ ghi đè nào xảy ra.

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$ $1/ [R,L] 

Điều này hoặc điều gì đó tương đương trước khi bạn viết lại thành /version/020 hy vọng sẽ khắc phục được.

Chỉnh sửa: Trên thực tế, bây giờ tôi đang nghĩ về nó, nếu bạn viết lại/chuyển hướng khi dấu gạch chéo bị thiếu, bạn không cần tắt DirectorySlash vì nó sẽ luôn có dấu gạch chéo theo thời gian được vào mod_dir. Có thể làm nó anyways để được an toàn?

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