2013-03-28 47 views
5

Tôi muốn để có được url thức này:htaccess thực hành tốt nhất

'url lý tưởng'

domain/services/city/name/ 

từ url này:

'url thực'

domain/page.php?s=services&c=city&a=name 

này nên hoạt động cả khi người dùng nhập url 'lý tưởng' và khi url 'thực' được nhấp từ nút.

Tôi muốn điều này cũng hoạt động với domain/services/domain/page.php?s=services hoặc domain/services/city/domain/page.php?s=services&c=city.

Tôi không yêu cầu mã nhưng thực tiễn tốt nhất để đạt được kết quả này là gì.

Tôi có nên chỉ sử dụng lệnh htaccess và viết cho mọi trường hợp không, hoặc tôi có phải làm gì khác không?

+0

Một câu ngạn ngữ tôi đã sử dụng trong nhiều năm khi viết các quy tắc viết lại, giống như CSS, phù hợp nhất với (dài nhất) đầu tiên. Đây có thể không phải là "quyền" nhất, nhưng nó phục vụ tôi tốt. – Uberfuzzy

Trả lời

0

Bạn có thể di chuyển logic quyết định, loại nào đó trên bộ điều phối ở phía php. Trong htacess chuyển hướng bất kỳ url không tồn tại nào bằng một số mẫu đến một số /index.php?url=$bla hoặc /rewrite.php?url=$bla

Sau đó, bao gồm từ đó mã của bạn. Bằng cách này, hầu hết các khung công tác đều hoạt động.

vấn đề chính ở đây là để bỏ qua 100% mã không php, như hình ảnh không tồn tại, CSSs, javascript và vv

1

Các thực hành tốt nhất sẽ được để viết một phân tích cú pháp truy vấn. Xem ví dụ trong ví dụ về khung công tác TinyMVC, hoặc serach google cho bộ định tuyến, bộ điều khiển phía trước, bộ điều phối, v.v.

Có thể khó đạt được vì bạn có tên thông số tùy chỉnh, như 'c' và 'a'. Vì vậy, bạn phải viết một số bản đồ sẽ gán tên tham số có thể đọc được con người để tên biến như:

'city' => 'c' 
'name' => 'a' 

phân tích cú pháp truy vấn của bạn cũng có thể tự động gán các biến trong một số cách như:

/domain/services/c=london/n=peter/ 

Kiểu này dispacher có thể chạy với tất cả các liên kết của bạn nếu bạn remap tất cả các yêu cầu tới một tệp php bằng .htaccess (thường là index.php), trừ hình ảnh, swf, css, js, v.v.

Đó là quyết định của bạn về cách định tuyến url của bạn logic. Hãy nhớ về các ký tự đặc biệt mã hóa url ane.

Cân nhắc nhận giá trị tham số theo thứ tự số như "tham số đầu tiên", "tham số thứ hai" để tạo mẫu url chung như/module/action/param1/param2/v.v. từ tên của nó.

Bạn có thể viết lệnh trong htaccess, nhưng sẽ rất khó khi thêm hành động mới.

Nếu bạn muốn tải lên những url "lý tưởng" ngay cả khi người dùng nhấp vào liên kết, gửi biểu mẫu, v.v. bạn không chỉ thay đổi .htaccess hoặc viết bộ định tuyến.Bạn cũng cần phải thay đổi liên kết/hành động trong mã hoặc viết builder URL như

<a href="<?php buildUrl('modulke' , 'action' , 'param1' , 'param2'); ?>">aaaa</a>

0

Bạn phải sử dụng .htaccess tắt tất nhiên, là con đường để đi.

Một nguyên tắc cho rằng sẽ là:

RewriteEngine On 

<IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteRule ^([^/.]+)/([^/.]+)/([^/.]*)?$ page.php?s=$1&c=$2&a=$3&%{QUERY_STRING} 
    </IfModule> 
1

Enable mod_rewrite và .htaccess qua httpd.conf và sau đó đặt mã này trong thư mục .htaccess dưới DOCUMENT_ROOT thư mục:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# redirects /page.php?s=services&c=city&a=name to /services/city/name/ 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+page\.php\?s=([^&]+)&c=([^&]+)&a=([^&]+) [NC] 
RewriteRule^/%1/%2/%3? [R=301,L] 

# forwards /services/city/name/to /page.php?s=services&c=city&a=name 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /page.php?s=$1&c=$2&a=$3 [L,QSA] 

PS: Lưu ý rằng các quy tắc trên chỉ chăm sóc /services/city/name/ URI. Để xử lý /services/city//services/ bạn sẽ cần phải thêm bộ tương tự như các quy tắc (1 chuyển hướng và 1 phía trước cho mỗi URI; đi từ cụ thể nhất đối với hầu hết các generic)

0

http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/ có tất cả các câu trả lời bạn đang tìm kiếm để bắt đầu.

Như @Uberfuzzy tuyên bố, việc thực hành tốt nhất là để xác định người đầu tiên cụ thể nhất vậy:

RewriteRule ^domain/services/city domain/page.php?s=services&c=city [NC,L] 
RewriteRule ^domain/services/  domain/page.php?s=services   [NC,L] 

Bạn thường sẽ cần phải sử dụng htaccess và viết các lệnh cho mọi trường hợp. Ngoại lệ là khi bạn sử dụng một khung công tác (Zend Framewor) hoặc công cụ khác xử lý url viết lại cho bạn.

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