10/10/2018, 10:56

[Question] Rewrite URL in PHP

Hi all,
Mình có đọc một số tutorial về rewrite url cho Appche, PHP.
Nhưng thử làm với website của mình hoài ko dc.
Vậy mạn phép hỏi các bạn trên forum ai rành thì support mình nhe.

Mình có dạng url như sau:
http://domain.com/?cmd=home
http://domain.com/?cmd=contact
http://domain.com/?cmd=intro
http://domain.com/?cmd=service
http://domain.com/?cmd=project

http://domain.com/?cmd=librarian
http://domain.com/?cmd=librarian&id=1 -> Có Id bài viết ở sau
http://domain.com/?cmd=librarian&page=1 -> Phân trang

http://domain.com/?cmd=news
http://domain.com/?cmd=news&id=1 -> Id bài viết ở sau
http://domain.com/?cmd=news&page=1 -> Phân trang

Vậy để rewrite cái url trên từ ?cmd=home thành home.html
Còn news và librarian thì như sau:

?cmd=librarian&id=1 ---> /1/librarian.html
?cmd=librarian&page=1 -> /page1/librarian.html

Cám ơn!
n3txpert viết 12:57 ngày 10/10/2018
RewriteRule ^/[0-9]/librarian.html$ ?cmd=librarian&id=$1
RewriteRule ^/page[0-9]/librarian.html$ ?cmd=librarian&page=$1
Alex0511 viết 13:05 ngày 10/10/2018
Mình đã create 1 file .htaccess với nội dụng như sau:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^home.html$ ?cmd=home
RewriteRule ^contact.html$ ?cmd=contact
RewriteRule ^intro.html$ ?cmd=intro
RewriteRule ^service.html$ ?cmd=service
RewriteRule ^project.html$ ?cmd=project
RewriteRule ^librarian.html$ ?cmd=librarian
RewriteRule ^/[0-9]/librarian.html$ ?cmd=librarian&id=$1
RewriteRule ^/page[0-9]/librarian.html$ ?cmd=librarian&page=$1
RewriteRule ^news.html$ ?cmd=news
RewriteRule ^/[0-9]/news.html$ ?cmd=news&id=$1
RewriteRule ^/page[0-9]/news.html$ ?cmd=news&page=$1
Sau đó chép vào thư mục chứ website, restart lại Appche nhưng vẫn ko chạy dc trên localhost, còn Upload lên hosting (internet) thì lại lỗi server 500

Any body help me(
khuongCOMPUTER viết 13:08 ngày 10/10/2018
Bỏ Options +FollowSymlinks đi.
Alex0511 viết 13:02 ngày 10/10/2018
Thx bro, Mình đã rewrite dc URL của các $_GET['cmd'] rồi,
Nhưng còn cái dụ news, và librarian thì vẫn chưa.
news.html?cmd=news&id=1
librarian.html?cmd=librarian&id=1


Web ko nhận được ID để SELECT vào DB.

Xin mọi người giúp mình tiếp

Mình có làm thử như bên dưới mà ko dc
Tức là giờ thay cái ?cmd=news thành news.html


RewriteRule ^/[0-9]/librarian.html$ librarian.html?id=$1
RewriteRule ^/page[0-9]/librarian.html$ librarian.html?page=$1
RewriteRule ^/[0-9]/news.html$ news.html?id=$1
RewriteRule ^/page[0-9]/news.html$ news.html?page=$1

Xin giúp thêm ạ

[=========> Bổ sung bài viết <=========]

Up cho ai quan tâm )

[=========> Bổ sung bài viết <=========]

Up cho ai biết và quan tâm vấn đề này
yesstyle viết 13:04 ngày 10/10/2018
Bó tay rồi, bác nào biết thì chỉ dùm bro Alex0511 đi
fotech_nd viết 13:06 ngày 10/10/2018
Được gửi bởi Alex0511
RewriteRule ^/[0-9]/librarian.html$ librarian.html?id=$1
RewriteRule ^/page[0-9]/librarian.html$ librarian.html?page=$1
RewriteRule ^/[0-9]/news.html$ news.html?id=$1
RewriteRule ^/page[0-9]/news.html$ news.html?page=$1

Xin giúp thêm ạ
Bỏ / ở đầu tiên đi là được. Mà đoạn rewrite của bạn nhìn rất rối, bạn nên viết lại như dưới đây, vừa ngắn, vừa dễ nhìn, vừa tổng quát.
PHP Code:
RewriteRule ^(***91;a-zA-Z***93;+).html$ ?cmd=$1
RewriteRule 
^(***91;0-9***93;+)/(***91;a-zA-Z***93;+).html$ ?cmd=$2&id=$1
RewriteRule 
^(page***91;0-9***93;+)/(***91;0-9***93;+)/(***91;a-zA-Z***93;+).html$ ?cmd=$3&id=$2&page=$
Regards!!!
fotech_nd viết 13:06 ngày 10/10/2018
Được gửi bởi ngothehientg2005
Minh co cac link website nhu sau.

http://domain.com/?act=product
http://domain.com/?act=product&c=hosting
http://domain.com/?act=product&c=office
http://domain.com/?act=product&c=hostingdetail
http://domain.com/?act=product&c=hostingdetail#hosting
http://domain.com/?act=product&server&p=0#eoraptor
http://domain.com/?act=product&c=server&p=1#sauropoda
http://domain.com/?act=product&c=server&p=2#t-Rex

minh muon chuyen lai thanh nhu the nay thi phai lam sao???
http://domain.com/product/-----------> trang san pham chung
http://domain.com/product/plesk-------> tung san pham rieng biet
http://domain.com/product/vps
http://domain.com/product/office
http://domain.com/product/hosting
http://domain.com/product/hostingdetail
http://domain.com/product/server/eoraptor-------> san pham con cua trang server
http://domain.com/product/server/sauropoda
http://domain.com/product/server/t-Rex

va co dau # o sau link thi phai rewrite nhu the nao vay???
.....
Dùng code
PHP Code:
RewriteEngine on
RewriteRule 
^product$ ?act=product
RewriteRule 
^product/(***91;0-9a-zA-Z+\-***93;+)$ ?act=product&c=$1
RewriteRule 
^product/server/eoraptor$ ?act=product&c=server&p=0
RewriteRule 
^product/server/sauropoda$ ?act=product&c=server&p=1
RewriteRule 
^product/server/t-Rex$ ?act=product&c=server&p=
Nhưng nên dùng
PHP Code:
RewriteEngine on
RewriteRule 
^product$ ?act=product
RewriteRule 
^product/(***91;0-9a-zA-Z+\-***93;+)$ ?act=product&c=$1
RewriteRule 
^product/(***91;0-9a-zA-Z+\-***93;+)/(***91;0-9a-zA-Z+\-***93;+)$ ?act=product&c=$1&p=$
Chú ý là ở trường hợp này trong code thì $_GET['p'] = eoraptor, sauropoda, t-Rex nên phải có bước xử lý để => p = 0, 1, 2

Về dấu # - đây chỉ anchor của client nên không ảnh hưởng gì khi viết rewrite.

Regards!!!
fotech_nd viết 12:59 ngày 10/10/2018
Được gửi bởi ngothehientg2005
Hi ban!
minh da lam theo huong dan cua ban,nhung khi tao file .htaccess thi bao loi 500 Internal server error.Minh da xoa # trong LoadModule rewrite_module cua apache va restart lai luon nhung van bao loi do,khong biet cu phap co bi sai khong.
Kiểm tra lại để chắc chắn rằng webserver đã cho phép sử dụng file .htaccess
http://www.tildemark.com/software/se...on-apache.html

Regards!!!
dungtvdsi viết 13:02 ngày 10/10/2018
Đây là file .htaccess mình vẫn làm cho các trang web mình viết mình chia sẻ với mọi người.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^.*$ - [L]

RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]

RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]

RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]

RewriteCond %{REQUEST_URI} !^/xpbox/FCK

RewriteRule ^(.+)/(.+)/(.+)/(.+)/$ index.php?member_site=$1&sys_sOption=$2&sys_sTask= $3&seo_name=$4&%{QUERY_STRING}
RewriteRule ^(.+)/(.+)/(.+)/$ index.php?member_site=$1&sys_sOption=$2&sys_sTask= $3&%{QUERY_STRING}
RewriteRule ^(.+)/(.+)/$ index.php?member_site=$1&sys_sOption=$2&%{QUERY_ST RING}
RewriteRule ^(.+)/$ index.php?member_site=$1&%{QUERY_STRING}

RewriteRule ^(.+)/(.+)/(.+)/(.+)\.html$ index.php?member_site=$1&sys_sOption=$2&sys_sTask= $3&seo_name=$4&%{QUERY_STRING}
RewriteRule ^(.+)/(.+)/(.+)\.html$ index.php?member_site=$1&sys_sOption=$2&sys_sTask= $3&%{QUERY_STRING}
RewriteRule ^(.+)/(.+)\.html$ index.php?member_site=$1&sys_sOption=$2&%{QUERY_ST RING}
RewriteRule ^(.+)\.html$ index.php?member_site=$1&%{QUERY_STRING}

Cách viết này khá ổn. Bạn vẫn có các chuỗi query ở đằng cuối. Còn phần rewrite thì bạn có thể cho bao nhiêu biến tùy ý.
Khi bạn dùng url rewrite thì các đường dẫn bạn dùng đều phải là đường dẫn tuyệt đối.

Đây là một số trang web mình đã làm
http://noithatviet.info

[=========> Bổ sung bài viết <=========]

Với url rewrite bạn nên viết một hàm riêng để tạo các url tuyệt đối. Hôm nay tớ hơi bận nên kô đưa hàm lên đây, hôm khác mình sẽ đưa hàm mình vẫn dùng mọi người tham khảo và đóng góp ý kiến giúp mình. hì giờ đánh AOE chút đánh kô giỏi toàn thua thằng bạn nhưng vẫn đánh.

quảng cáo chút
http://noithatviet.info
http://noithatviet.info/Admin/
user + pass : dungtv
Bài liên quan
0