10/10/2018, 11:24
Nhờ các bác giúp về .htaccess
(Chú ý : do diễn đàn ko cho post link trực tiếp khi chưa đủ 10 post nên Em để dấu chấm (.) trong ngoặc []. Các bác thông cảm giúp)
Tình hình là Em có con site hiện tại đang chạy link thế này
tenmien[.]com/index[.]php
và Em có 1 cái form search, khi submit search thì link sẽ hiển thị như sau :
tenmien[.]com/index[.]php?search=keyword
bây giờ Em muốn re-write lại cái url như sau :
mỗi khi vào tenmien thì nó sẽ tự động chuyển về thành
tenmien[.]com/search/
và sau khi nhấn search thì url nó sẽ chuyển thành
tenmien[.]com/search/keyword/
-------------------------------------------------
Em đã thử viết đoạn code trên trong .htaccess như sau :
RewriteEngine On
RewriteRule ^search$ /search/$1 [R]
RewriteRule ^search/ /index[.]php
RewriteRule ^search/(.*)/$ /index[.]php?search=$1
nhưng không hoạt động.
Loay hoay mãi mà ko viết được. Bác nào rành về cái này giúp Em sửa cho đúng được ko ? viết thế nào cho chạy được & trong form html thì action phải để thế nào cho đúng ?
Chân thành cám ơn các bác !
Tình hình là Em có con site hiện tại đang chạy link thế này
tenmien[.]com/index[.]php
và Em có 1 cái form search, khi submit search thì link sẽ hiển thị như sau :
tenmien[.]com/index[.]php?search=keyword
bây giờ Em muốn re-write lại cái url như sau :
mỗi khi vào tenmien thì nó sẽ tự động chuyển về thành
tenmien[.]com/search/
và sau khi nhấn search thì url nó sẽ chuyển thành
tenmien[.]com/search/keyword/
-------------------------------------------------
Em đã thử viết đoạn code trên trong .htaccess như sau :
RewriteEngine On
RewriteRule ^search$ /search/$1 [R]
RewriteRule ^search/ /index[.]php
RewriteRule ^search/(.*)/$ /index[.]php?search=$1
nhưng không hoạt động.
Loay hoay mãi mà ko viết được. Bác nào rành về cái này giúp Em sửa cho đúng được ko ? viết thế nào cho chạy được & trong form html thì action phải để thế nào cho đúng ?
Chân thành cám ơn các bác !
Bài liên quan
Có 1 cách khác có thể giúp bạn chuyển sang dạng: /search/keyword/ đó là chuyển từ POST qua GET. Cách này sẽ khiến user bị redirect thêm 1 lần.
Khi POST thì sẽ nhận $_POST['search'] = keyword.
bạn sẽ check GET, nếu empty thì đẩy nó qua /search/keyword/ (rewrite bằng .htaccess).
RewriteRule ^search$ index.php [NC,L]
RewriteRule ^search/$ index.php [NC,L]
RewriteRule ^search/(.*)$ index.php?search=$1 [NC,L]
Thử thế này xem có được không? Chỗ redirect thì nên dùng php hay html refresh hoặc javascript đều dc. Mình không dùng .htaccess cho redirect
<form action="index.php" method="POST">
<input type="hidden" name="isSearch" value="1" />
<input type="text" name="search" value="" />
</form>
ở file index.php sẽ xử lý như sau:
if (isset($_POST['isSearch'] AND $_POST['isSearch'] == "1")
{
header("location: /search/".$_POST['search']."/");
}
Ở .htaccess:
RewriteRule ^search/(.*)$ index.php?act=search&keyword=$1 [NC,L]
Khi đó thì nó sẽ chuyển sang dạng $_GET và ở index.php sẽ lọc như sau:
if (isset($_GET['act']) AND $_GET['act'] == "search")
{
$keyword = $_GET['keyword'];
....
}
Cách này sẽ khiến user bị redirect 1 lần.
if (isset($_POST['isSearch'] AND $_POST['isSearch'] == "1")
{
header("location: /search/".$_POST['search']."/");
}
Ở đầu trang trước khi xử lý các request khác để tốc độ được tốt nhất có thể.