2010-03-01 37 views
12

Sử dụng Apache 2.2 và PHP 5, cách tốt nhất để chạy PHP mà không có phần mở rộng .php là gì. Ví dụ, tôi có một kịch bản gọi là app.php và tôi thích gọi nó nhưChạy PHP mà không có phần mở rộng mà không cần sử dụng mod_rewrite?

http://example.com/app

Xin lưu ý rằng tôi vẫn muốn giữ phần mở rộng .php vào file và tôi không có mod_rewrite. Không muốn sử dụng index.php vì nó đòi hỏi quá nhiều thư mục.

Tôi đã tìm thấy một con đường bằng cách thêm này để .htaccess của tôi,

AddHandler server-parsed .php 
SetHandler application/x-httpd-php 
AddHandler application/x-httpd-php .php 

Trang chạy chậm hơn một chút bằng cách sử dụng này. Tôi nghi ngờ nó gọi SSI trên mỗi trang PHP. Tự hỏi nếu có cách nào tốt hơn để thực hiện việc này.

+0

Tôi đã thấy điều này được thực hiện bằng cách sử dụng chỉ thị '' nhưng bạn ít có khả năng để có được điều đó đang chạy trong một chia sẻ môi trường hơn 'mod_rewrite' tôi nghĩ. –

+2

Cá nhân, tôi chỉ cần thả đủ gợi ý về "hiệu suất xuống cấp" và "Tôi là" tất cả những gì cô ấy có, Thuyền trưởng! " cho đến khi họ cài đặt mod_rewrite. – Xorlev

Trả lời

25

Cách khác là sử dụng content negotiation. Bật multiviews:

Options +MultiViews 

Nếu một tài nguyên được đặt tên không tồn tại, Apache sẽ glob cho các tập tin, sau đó sắp xếp dựa trên các loại phương tiện truyền thông và nội dung mã hóa yêu cầu gửi bởi trình duyệt. Nếu chỉ có một tệp (tập lệnh PHP của bạn), thì đó là những gì mà URL giải quyết.

+0

Nó chỉ ra mod_negotiation được cài đặt trên tất cả các máy chủ. Vì vậy, đây là giải pháp tốt nhất tôi tìm thấy cho đến nay. Không có sự khác biệt hiệu suất đáng chú ý bằng cách làm điều này hoặc. Cảm ơn! –

+2

này vẫn còn có liên quan, và bạn có thể cần thêm "ứng dụng AddType/x-httpd-php .php .phtml .html .htm" để "/ etc/apache2/mods-enabled/MIME .conf: "Các tệp tin – mckenzm

+1

@mckenzm: .html và .htm không được hiểu là PHP. 'AddType' chỉ nên được sử dụng để đặt loại MIME của tài nguyên chứ không phải trình xử lý. Cho rằng, có 'AddHandler' (mà thậm chí hoạt động khi PHP được chạy qua CGI). – outis

-1

Câu trả lời ngắn gọn là bạn sẽ không thể thực hiện việc này theo cách bạn muốn. PHP sẽ yêu cầu một số phần mở rộng để thực thi các tập tin, do đó bạn cũng có thể để nó dưới dạng * .php.

Trừ khi bạn sử dụng mod_rewrite, bạn sẽ phải gọi các tệp bằng cách sử dụng toàn bộ tệp và tiện ích.

Đó là vẻ đẹp của mod_rewrite - nó cho phép bạn làm một việc như vậy.

Tôi sẽ đặt câu hỏi cho bạn - tại sao bạn không thể sử dụng mod_rewrite? Nó có phải là một vấn đề môi trường, một sự lựa chọn, bạn đang sử dụng Lighttpd (nhẹ)?

mở rộng

Quấn viết lại quy tắc của bạn trong một cái gì đó như thế này để giữ cho nó khỏi thổi lên nếu máy chủ không hỗ trợ mod_rewrite:

<IfModule mod_rewrite.c> 
// DO REWREITE HERE 
</IfModule> 

Nếu bạn tin rằng đó là một mối quan tâm an ninh hoặc một cái gì đó bằng nhau sau đó bạn cũng có thể thực hiện kiểm tra sau và gửi chúng đến 404 tùy chỉnh hoặc thậm chí tài liệu của bạn và cung cấp cho họ các ví dụ về cách bật mod_rewrite và giải thích sự cần thiết, v.v. không sử dụng nó, người dùng sẽ chỉ thấy phần mở rộng .php bu các trang của bạn vẫn hoạt động.

<IfModule !mod_rewrite.c> 
    ErrorDocument 404 /application/errors/404.php 
    // ERROR 404 ABOVE OR DO ANOTHER DIRECT REDIRECT TO AN INFORMATION PAGE 
</IfModule> 
+0

Vì một số lý do, mod_rewrite không được cài đặt trên một số máy chủ mà trang web sẽ chạy. Tôi đã có nó làm việc mà không cần mở rộng.Chỉ cần tự hỏi nếu có bất kỳ cách nào nhanh hơn mà không nghỉ mát để SSI. –

+0

@ZZ Coder - Ai đó có thể có một số phép thuật cho bạn, nhưng tôi nghi ngờ nó - Tôi đã thử điều này rất trước và không bao giờ tìm thấy một giải pháp hợp lệ. Có khả thi để cho mọi người biết rằng nếu máy chủ của họ không hỗ trợ mod_rewrite thì họ sẽ thấy phần mở rộng PHP? Xem bản chỉnh sửa của tôi để biết cách giữ .htaccess bị thổi phồng nếu mod_rewrite không được bật. Đó là cách làm việc của wordpress và nó hoạt động tốt cho họ. – Shane

7

Bạn cũng có thể buộc các loại mime của một tập tin cụ thể trong .htaccess của bạn:

<Files app> 
ForceType application/x-httpd-php 
</Files> 
+0

Điều này cần nhiều upvotes hơn. –

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