Hãy nói rằng chúng tôi có .htaccess này:
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L]
Khái niệm mentionned trong câu hỏi của bạn sẽ có logic sau đây:
^$
.
(*.): Phù hợp với bất kỳ ký tự và bất cứ ký tự đơn
*
: phù hợp không hay nhiều của biểu tượng trước đó
Về cơ bản, nó sẽ khớp với bất kỳ thứ gì như:
folder1/file1.html
: $ 1 sẽ folder1/file1.html
file1.html
: $ 1 sẽ file1.html
Bằng cách này nó là rất dễ dàng để phân tích toàn bộ yêu cầu trong PHP hay Python. Mặt khác, bạn không lọc bất kỳ ký tự không mong muốn nào trong URL mà bạn sẽ phải xác thực trong tập lệnh của mình.
Ví dụ: [email protected]*-+
([^.] +)
[]
: Cho kết quả bất kỳ trong những biểu tượng bên trong quảng trường niềng răng
[^]
: phù hợp với bất kỳ ký tự khác ngoài những gì được liệt kê bên trong niềng răng (ref).
+
: khớp một hoặc nhiều ký hiệu trước đây
[^.]
: khớp với bất kỳ thông tin nào khác ngoài ký tự .
.Sẽ ngừng kết hợp khi tìm thấy một ký tự .
Từ ref.
Ký tự đặc biệt hoặc siêu ký tự duy nhất bên trong một lớp ký tự là dấu ngoặc đóng (]), dấu gạch chéo ngược(), dấu mũ (^) và dấu nối (-). Các siêu ký tự thông thường là các ký tự bình thường bên trong một lớp ký tự, và không cần phải được thoát bằng dấu gạch chéo ngược. Để tìm kiếm dấu sao hoặc dấu cộng, hãy sử dụng [+ *]. Regex của bạn sẽ làm việc tốt nếu bạn thoát khỏi metacharacters thường xuyên bên trong một lớp nhân vật, nhưng làm như vậy làm giảm đáng kể khả năng đọc.
Về cơ bản nó sẽ phù hợp với bất cứ điều gì như:
folder1/file1.html
: $ 1 sẽ folder1/file1
file1.html
: $ 1 sẽ file1
Đây là hiệu ứng giống như người đầu tiên, ngoại trừ này xóa mọi thứ sau dấu chấm .
^([^ /] +) $
[]
: phù hợp với bất kỳ của những biểu tượng bên trong quảng trường niềng răng
+
: phù hợp với một hoặc nhiều hơn các biểu tượng trước
^
: phù hợp với bắt đầu của một chuỗi
[^/]
: khớp với bất kỳ thông tin nào khác ngoài ký tự /
. Sẽ ngừng kết hợp khi một ký tự /
được tìm thấy
Điều này cũng giống như tác dụng đầu tiên ngoại trừ việc này sẽ kiểm tra mọi yêu cầu đến số /
. Vì vậy, nếu bạn có nhiều thư mục, bạn sẽ phải bao gồm nhiều lần regex này.
Về cơ bản nó sẽ phù hợp với bất cứ điều gì tương tự (nếu bạn chỉ có một bộ):
folder1/file1.html
: $ 1 sẽ folder1
file1.html
: $ 1 sẽ file1.html
và nếu bạn có 2 :
folder1/file1.html
: $ 1 sẽ folder1
và $ 2 sẽ phù hợp file1.html
file1.html
: $ 1 sẽ file1.html
Các thư mục hơn bạn có, càng có nhiều quy tắc bạn có thể phải thêm.
^([a-z0-9] +) $ [^([a-z0-9.] +) $ ví dụ này]
[]
: phù hợp với bất kỳ của những biểu tượng bên trong quảng trường niềng răng
+
: phù hợp với một hoặc nhiều hơn các biểu tượng trước
a-z
: Kết hợp chữ từ a đến z
0-9
: số trận đấu từ 0-9
(Bạn cũng có thể sử dụng \ d hoặc \ w)
Về cơ bản nó sẽ phù hợp với bất cứ điều gì tương tự (nếu bạn chỉ có một bộ - thêm dấu chấm):
folder1/file1.html
: $ 1 sẽ folder1
file1.html
: $ 1 sẽ file1.html
và nếu bạn có 2:
folder1/file1.html
: $ 1 sẽ folder1
và $ 2 sẽ phù hợp file1.html
file1.html
: $ 1 sẽ file1.html
Cái này hoạt động như trước, ngoại trừ bạn phải xác định các ký tự mà bạn muốn. Vì vậy, khi bạn kiểm tra chuỗi của bạn trong PHP bạn biết những ký tự bạn nhận được. Giống như trong ví dụ của tôi với tên tệp tôi đã thêm \.
để nó nhận ra dấu chấm. Điều này cũng nhanh hơn để thực hiện.
Xem điểm chuẩn: .htaccess mod_rewrite performance
Vì vậy, nếu bạn biết những gì loại yêu cầu bạn sẽ giúp bạn luôn có thể sử dụng các tác phẩm mới nhất nhưng nếu bạn không chắc chắn, bạn sẽ phải chọn một trong đó phù hợp hơn nhu cầu của bạn. Có thể có nhiều sự khác biệt giữa tất cả chúng nhưng mục tiêu chính là hiểu được những gì chúng làm hoặc bắt được. Ngoài ra, hiệu suất là một cái gì đó bạn cần phải xem xét. Kết hợp mọi thứ, sau đó phân tích cú pháp yêu cầu trong PHP hoặc Python có thể mất nhiều thời gian hơn so với chỉ đơn giản là kết hợp chúng lúc đầu và chỉ cần sử dụng chúng trong tập lệnh của bạn.
Điều này có thể giúp: http://stackoverflow.com/questions/8145128/htaccess-mod-rewrite-performance –
Công cụ regexp của Apache chỉ là cùng một công cụ PCRE như trong PHP và Perl. Lời khuyên của tôi là giữ nó đơn giản ngu ngốc. Tất nhiên là một người đơn giản, ... Ví dụ IMHO, '\ w' dễ đọc hơn' [a-z0-9A-Z] '. Đây là "ý nghĩa của cuộc sống" Q. SO không phải là về triết học. – TerryE
Tôi nghĩ Perl không thực sự sử dụng PCRE. – 0xC0000022L