2010-02-03 31 views
5

Tôi cần phải bao gồm một forwardslash dấu tùy chọn, đó là một /, trong RewriteRule tôi.htaccess biểu hiện thường xuyên cần phải thực hiện trailing dấu gạch chéo lên tùy chọn

Những gì tôi có cho đến nay là

RewriteRule ^([a-zA-Z0-9]+)$ u.php?$1|$2 

nào hoạt động tốt , ví dụ: http://foo.bar/abcde sẽ chuyển hướng đến http://foo.bar/u.php?abcde và xử lý bất kỳ thông số chuỗi truy vấn nào có thể có mặt.

Những gì tôi cần phải làm là lấy http://foo.bar/abcde/ (với forwardslash dấu) và chuyển hướng đến http://foo.bar/u.php?abcde

Vì vậy, nếu hiện tại của nó, tôi cần loại bỏ các dấu gạch chéo cuối cùng từ $ 1 trong RewriteRule tôi. Làm thế nào để tôi làm điều này? Tôi mới để apache và đã thử nhiều quy tắc regex khác nhau nhưng không thể làm cho nó đúng.

Trả lời

14

Chỉ cần đặt /? trước $ vào cuối trong mô hình của bạn:

RewriteRule ^([a-zA-Z0-9]+)/?$ u.php?$1 

Nhưng tôi thà đề nghị bạn để cho phép chỉ là một chính tả (có hoặc không có trailing slash) và chuyển hướng một khác:

# remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)/$ /$1 [L,R=301] 
# add trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ /$0/ [L,R=301] 
+0

@Phil: Không, điều đó là không thể. Điều duy nhất bạn có thể làm là xóa hoặc thêm nó vào tất cả các yêu cầu. – Gumbo

+0

Thực tế cho những gì tôi đang cố gắng đạt được nó có ý nghĩa hơn cho phép cả hai cách viết, vì vậy tôi sẽ sử dụng hai quy tắc viết lại cho đến khi tôi hoàn toàn hiểu những gì bạn đã đề xuất với 'RewriteCond'. – Phil

+1

@Phil: Hai điều kiện chỉ tránh chuyển hướng các yêu cầu có thể được ánh xạ tới các thư mục hiện có ('-d') hoặc tới các tệp hiện có (' -f'). – Gumbo

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