2011-12-23 31 views
11

tôi sử dụng .htaccess và tôi có quy tắc cho phép tôi tự động tìm kiếm sản phẩm trong cơ sở dữ liệu của mình..htaccess với các sản phẩm (chuỗi)

để ai đó có thể bấm vào một liên kết như thế này:

www.domain.com/product/modular-plastic-lunch-set.html 

và xem sản phẩm. Bây giờ vấn đề của tôi là, khi tôi sử dụng

www.domain.com/product/Modular-Plastic-Lunch-Set.html 

nó không hoạt động,

tại sao? đây là quy tắc của tôi:

RewriteEngine On 
RewriteRule ^product/([a-z0-9\-]+).html$ products.php?name=$1 

Trả lời

12

Nó không làm việc vì bạn không có một trong hai A-Z hoặc [NC] cờ.

Sử dụng cờ [NC] làm cho RewriteRule được đối sánh theo cách không phân biệt chữ hoa chữ thường. Tức là, nó không quan tâm liệu các chữ cái có xuất hiện dưới dạng chữ hoa hay chữ thường trong URI được so khớp hay không.

RewriteRule ^product/([a-z0-9\-]+).html$ php.php?name=$1 [NC,L,QSA] 

hoặc

RewriteRule ^product/([a-zA-Z0-9\-]+).html$ php.php?name=$1 [L,QSA] 

tôi thêm L:

Các [L] cờ gây mod_rewrite để ngừng xử lý các thiết lập quy tắc. Trong ngữ cảnh nhất, điều này có nghĩa là nếu quy tắc phù hợp, không có quy tắc nào khác là sẽ được xử lý. Điều này tương ứng với lệnh cuối cùng trong Perl hoặc lệnh ngắt trong C. Sử dụng cờ này để cho biết rằng quy tắc hiện tại sẽ được áp dụng ngay lập tức mà không xem xét các quy tắc khác.

và QSA cờ:

Khi thay thế URI chứa một chuỗi truy vấn, hành vi mặc định RewriteRule là để loại bỏ các chuỗi truy vấn hiện có, và thay thế nó với mới được tạo một. Sử dụng cờ [QSA] làm cho truy vấn chuỗi được kết hợp.

Thông tin thêm về cờ tại địa chỉ: http://httpd.apache.org/docs/2.3/rewrite/flags.html

TIP: nếu bạn đang tìm kiếm các sản phẩm sử dụng tên, bạn có thể thấy sự chậm trễ trong truy vấn của bạn, speically nếu bạn không có một chỉ mục. Bạn nên nhìn vào điều này trước khi nó trở nên xấu xí.

+0

+1 cho cờ '[NC]'. Không biết về điều đó. –

+0

cảm ơn nó hoạt động, tôi sẽ ngủ thông minh hơn tối nay - nhờ lời giải thích quá, rất hữu ích. – dale

+0

bạn hoan nghênh và chào mừng bạn đến với stackoverflow! –

2

Bạn chỉ đang tìm chữ thường (và số). Bạn cần thêm chữ hoa.

RewriteEngine On 
RewriteRule ^product/([A-Za-z0-9\-]+).html$ products.php?name=$1 
Các vấn đề liên quan