2010-03-04 30 views
5

Tôi đang xây dựng một khung PHP nhỏ cho các trang web mà tôi tạo và muốn biết liệu tôi có thể dựa vào mod_rewrite là availabe trên hầu hết các host không.Tôi có thể dựa vào mod_rewrite không?

  • Tôi có nên sử dụng ý tưởng đó không? Có nhiều điểm tốt rồi (một điểm vào, URL "đẹp", có thể đọc được)

  • Nó không sẵn có ở đâu?

  • Tôi có nên đưa giải pháp thay thế vào khung nếu mod_rewrite không khả dụng trên con hoster đó không?

Trả lời

5

mod_rewrite thường có sẵn. Nếu nó không có sẵn trên máy chủ của máy chủ của bạn, hãy thả chúng.

+0

Tôi đang nói về máy chủ của khách hàng của mình. – someone

+0

Làm cách nào để thay đổi câu trả lời? Nó vẫn thường có sẵn, và bạn nên chuyển khách hàng của bạn vào một máy chủ khác nếu không. – ceejayoz

+0

Nếu bạn nghi ngờ rằng một khách hàng có thể không có quyền truy cập vào mod_rewrite thì bạn nên xây dựng khung công tác dựa trên giả định đó. – thetaiko

2

Nếu bạn đang phát triển một ứng dụng có sẵn công khai, bạn nên xem xét rằng mod_rewrite có thể không có sẵn và hỗ trợ thay thế. AcceptPathInfo là một.

+0

+1 các tùy chọn khác mà bạn cung cấp, càng có nhiều cơ hội mà sản phẩm của bạn có. –

0

mod_rewrite chỉ dành cho apache vì vậy nếu bạn cần phải làm việc trên IIS hay cái gì khác bạn sẽ gặp sự cố, nhưng trong PHP bạn cũng có thể sử dụng này:

private function getURI() 
{ 
    $uri = ""; 

    if (isset($_SERVER['PATH_INFO'])) 
     $uri = getValueFrom($_SERVER, 'PATH_INFO', @getenv('PATH_INFO')); 
    elseif (isset($_SERVER['ORIG_PATH_INFO'])) 
     $uri = getValueFrom($_SERVER, 'ORIG_PATH_INFO', @getenv('ORIG_PATH_INFO')); 
    else 
     $uri = ""; 

    $scriptname = basename($_SERVER['SCRIPT_FILENAME']); 
    if (strpos($uri, $scriptname) > -1) 
     $uri = substr($uri, strpos($uri, $scriptname) + strlen($scriptname), strlen($uri)); 

    return $uri; 
} 

Thay đổi URL là một thực hành tốt, actualy được rộng sử dụng trên web và là một recomendation SEO vì là tốt hơn có điều này:

domain.com/aboutus

này

domain.com/index.php?app=main & action = chương & id mô-đun = 1

3

Các mod_rewrite thường là avaiable trên hầu hết Apache tổ chức những ngày này. Tuy nhiên, nó không phải là khó để làm việc xung quanh sự vắng mặt của nó, và bằng cách làm như vậy bạn đảm bảo rằng mọi người bị mắc kẹt trên một/với một máy chủ/IT nhân viên đã tắt nó đi, hoặc một máy chủ/nhân viên IT chạy IIS, vv

Hầu hết các khung công tác hoặc ứng dụng mới được xây dựng ngày nay đều sử dụng mod_rewrite để chặn tất cả các yêu cầu URL thông qua một tệp PHP tải trước (được gọi là Bootstrapping, mẫu Frontloading, v.v.). Phần URL không phải là tên miền được phân tích cú pháp thành một số đối tượng và đối tượng đó được sử dụng bất cứ khi nào bạn cần truy cập vào URL.

Khi mod_rewrite là không có sẵn, các URL theo hình thức

http://example.com/index.php/foo/baz/bar 

được sử dụng để thay thế. Yêu cầu cho URL trên được xử lý bởi tệp index.php. Sau đó, bạn có thể phân tích một trong những biến máy chủ như

$_SERVER['REQUEST_URI'], $REQUEST['PATH_INFO'], etc. 

vào một số đối tượng (đối tượng mà bạn muốn sử dụng nếu bạn có mod_rewrite) và sử dụng đối tượng mà bất cứ khi nào bạn cần truy cập vào các thông tin URL.

Dù bằng cách nào, phần còn lại của khung/ứng dụng của bạn chỉ truy cập vào đối tượng và không phải lo lắng về cách thông tin có trong đó.

Additional Reading

0

Nó có sẵn trong hầu hết các máy chủ - nhưng nếu bạn nghi ngờ nó không phải, bạn nên thực hiện một cách năng động để lấy liên kết - sau đó bạn có thể có một hằng số được xác định trước rằng bạn sửa đổi trước khi tất cả những gì nói hay không mod_rewrite có sẵn. Sau đó, bạn có thể tìm nạp các URL bằng cách sử dụng hằng số đó làm cách để xác định điều gì xảy ra.

0

Tôi nghĩ rằng bất kỳ ứng dụng phù hợp nào cũng nên sử dụng mod_rewrite và hầu hết các máy chủ web đều cung cấp tính năng này. Nếu họ không cung cấp, hãy tắt chúng đi.

Ngoài ra, không chỉ mod_rewrite là một tùy chọn tốt để sử dụng mà còn các cài đặt php khác như thế này php_valuemax_execution_time và cứ như vậy để đảm bảo bạn đang tùy chỉnh môi trường cho phù hợp với mục đích ứng dụng của mình.

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