2012-01-03 29 views
14

i digg trên internet về .htaccess và viết lại các quy tắc tôi cần phải làm với trang web của mình..htaccess và params

tôi thấy một cái gì đó tôi không hiểu và muốn biết ý nghĩa của nó

tôi đang tự hỏi sự khác biệt giữa các biểu thức chính quy 2 mà tôi cần phải sử dụng cho trang web của tôi trong số tất cả những người khác tôi cần phải sử dụng) là gì:

RewriteRule ^home$ mainpage.php?id=$1 [QSA] 

RewriteRule ^home(/)?$ mainpage.php?id=$1 [L] 

tôi nhìn QSA và L nhưng những gì các (/) phương tiện?

+0

home.php và mainpage.php? –

+0

oh xin lỗi sao chép sai và dán –

+1

'(/)?' Được sử dụng để bắt cả hai 'example.com/home' và' example.com/home/'. – Virendra

Trả lời

18

Biểu thức sẽ là (/)? không (/). Nó có nghĩa là dấu gạch chéo hay không trên URL. Hai URL sẽ đi đến cùng một vị trí:

http://www.domain.com/home/

http://www.domain.com/home 

Vì vậy, các dấu gạch chéo là không bắt buộc. Bằng cách này, nếu một bot hoặc một công cụ tìm kiếm đặt nó, quy tắc sẽ hoạt động.

Bạn có thể viết lại các quy tắc như thế này:

RewriteRule ^home/?$ mainpage.php?id=$1 [L,QSA] 

Ngoài ra, tôi thấy bạn nói:

trong số tất cả những người khác tôi cần phải sử dụng

Nếu tất cả các trang của bạn đi vào cùng một tệp (trong trường hợp này là mainpage.php), bạn có thể tạo một quy tắc sẽ tự động viết lại chúng thay vì tạo 10 hoặc 15 quy tắc (hoặc nhiều hơn). Bạn có thể làm như sau:

RewriteEngine on 
REwriteBase/
RewriteRule ^([a-z0-9\-_]+)/?$ mainpage.php?id=$1 [L,QSA] 

Quy tắc này sẽ sử dụng chữ cái, số, dấu gạch ngang và gạch dưới làm trang.

+0

cảm ơn bạn đã cung cấp thông tin này và quy tắc này, tôi có khoảng 25 trang và rất hữu ích –

+0

bạn được chào đón –

2

(/)? có nghĩa là "dấu gạch chéo tùy chọn".

  • (/) tạo một nhóm có chứa/khớp với bất kỳ thứ gì giữa các dấu ngoặc đơn. Trong trường hợp này, vì nó là một ký tự đơn, nên các dấu ngoặc đơn là nhiều hơn để chụp các mảnh hơn bất kỳ thứ gì khác. (Bất cứ điều gì phù hợp sẽ trở thành $1, $2, vv tùy thuộc vào có bao nhiêu nhóm chụp (bộ dấu ngoặc đơn) có trong mẫu và nơi họ đang có.)

BTW, RewriteRule đầu tiên của bạn không làm cho một toàn bộ rất nhiều ý nghĩa - vì không có nhóm nào cung cấp giá trị cho $1, nó có thể sẽ luôn trống. Trong lần thứ hai, $1 sẽ trống hoặc dấu gạch chéo, tùy thuộc vào việc mẫu con phù hợp hay không. home sẽ được viết lại thành mainpage.php?id=home/ sẽ được viết lại thành mainpage.php?id=/.

  • ? có nghĩa là "0 hoặc 1 của nguyên tử trước".("Nguyên tử", BTW, là khối xây dựng của một regex.) Trong trường hợp này, vì nguyên tử trước nó là (/) (có hiệu quả là /), ? có nghĩa là "0 hoặc 1 dấu gạch chéo".
+0

cảm ơn bạn đã cung cấp thông tin –